当前位置: 首页 > news >正文

【数据结构与算法】之排序系列-20240203

在这里插入图片描述


这里写目录标题

  • 一、628. 三个数的最大乘积
  • 二、645. 错误的集合
  • 三、747. 至少是其他数字两倍的最大数
  • 四、905. 按奇偶排序数组
  • 五、922. 按奇偶排序数组 II
  • 六、976. 三角形的最大周长

一、628. 三个数的最大乘积

简单
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。

示例 1:
输入:nums = [1,2,3]
输出:6

示例 2:
输入:nums = [1,2,3,4]
输出:24

示例 3:
输入:nums = [-1,-2,-3]
输出:-6

class S628:def func(self, nums):nums.sort()return max(nums[0] * nums[1] * nums[2], nums[-1] * nums[-2] * nums[-3])res = S628()
nums = [1, 2, 3]
print(res.func(nums))

二、645. 错误的集合

简单
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。
给定一个数组 nums 代表了集合 S 发生错误后的结果。
请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。

示例 1:
输入:nums = [1,2,2,4]
输出:[2,3]

示例 2:
输入:nums = [1,1]
输出:[1,2]

class S645:def func(self, nums):total = sum(range(len(nums) + 1))num = total - sum(set(nums))  # 3diff = total - sum(nums)  # 1return [num - diff, num]  # [2,3]res = S645()
nums = [1, 2, 2, 4]
print(res.func(nums))

三、747. 至少是其他数字两倍的最大数

简单
给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。
请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。

示例 1:
输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 至少是数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。

示例 2:
输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。

class S747:def func(self, nums):max_value = max(nums)if max_value > nums[-2] * 2:return nums.index(max_value)return -1res = S747()
nums = [1, 2, 3, 4]
print(res.func(nums))

在这里插入图片描述

四、905. 按奇偶排序数组

简单
给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。
返回满足此条件的 任一数组 作为答案。

示例 1:
输入:nums = [3,1,2,4]
输出:[2,4,3,1]
解释:[4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案。

示例 2:
输入:nums = [0]
输出:[0]

思路:双指针

class Solution905:def func(self, nums):i = 0for j in range(len(nums)):if nums[j] % 2 == 0:nums[i], nums[j] = nums[j], nums[i]i += 1return nums

五、922. 按奇偶排序数组 II

简单
给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。
对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。
你可以返回 任何满足上述条件的数组作为答案 。

示例 1:
输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。

示例 2:
输入:nums = [2,3]
输出:[2,3]

class S922:def funcc(self, nums):i = 0j = 1while i < len(nums) and j < len(nums):if nums[i] % 2 == 0:i += 2  # 如果nums[0]为偶数,i+2elif nums[j] % 2 == 1:j += 2else:nums[i], nums[j] = nums[j], nums[i]return numss = S922()
nums = [4, 2, 5, 7]
print(s.funcc(nums))

六、976. 三角形的最大周长

简单
给定由一些正数(代表长度)组成的数组 nums ,返回 由其中三个长度组成的、面积不为零的三角形的最大周长 。如果不能形成任何面积不为零的三角形,返回 0。

示例 1:
输入:nums = [2,1,2]
输出:5
解释:你可以用三个边长组成一个三角形:1 2 2。

示例 2:
输入:nums = [1,2,1,10]
输出:0
解释:
你不能用边长 1,1,2 来组成三角形。
不能用边长 1,1,10 来构成三角形。
不能用边长 1、2 和 10 来构成三角形。
因为我们不能用任何三条边长来构成一个非零面积的三角形,所以我们返回 0。

class Solution:def largestPerimeter(self, nums: List[int]) -> int:numss = sorted(nums, reverse=True)print(numss)for i in range(len(numss) - 2):if numss[i] < numss[i + 1] + numss[i + 2]:return numss[i] + numss[i + 1] + numss[i + 2]return 0res = Solution()
nums = [1, 2, 1, 10, 2]
print(res.largestPerimeter(nums))

在这里插入图片描述

http://www.lryc.cn/news/293392.html

相关文章:

  • C++之std::tuple(一) : 使用
  • 蓝桥杯嵌入式第六届真题(完成)STM32G431
  • 【日志记录】——主MCU 通过私有协议更新从MCU程序固件
  • 【0253】深入分析Query Execution(一)
  • 编译opencv4.6问题汇总,第三方软件包见我发的资源
  • Matplotlib炫酷气泡图:代码实战与参数解析【第55篇—python:Matplotlib炫酷气泡图】
  • Android学习之路(29) Gradle初探
  • python-自动化篇-运维-语音识别
  • ElasticSearch-ElasticSearch实战-仿京东商城搜索(高亮)
  • 解释 Python 中的描述符(Descriptor)是什么?如何在 Python 中实现一个简单的 ORM(对象关系映射)?
  • IP数据云识别真实IP与虚假流量案例
  • signalR+websocket:实现消息实时通讯——技能提升
  • 机器学习入门-----sklearn
  • 双非本科准备秋招(15.3)—— 力扣二叉树
  • 20240203在WIN10下使用GTX1080配置stable-diffusion-webui.git不支持float16精度出错的处理
  • 京东微前端框架MicroApp简介
  • SpringBoot 使用定时任务(SpringTask)
  • 国标GB/T 28181详解:设备视音频文件检索消息流程
  • openssl自签名CA根证书、服务端和客户端证书生成并模拟单向/双向证书验证
  • NIO Selector简介
  • 2023-12蓝桥杯STEMA考试 C++ 中高级试卷解析
  • 设计模式——2_1 命令(Command)
  • HP数组面试题
  • 机器学习5-线性回归之损失函数
  • vulhub中Adminer ElasticSearch 和 ClickHouse 错误页面SSRF漏洞复现(CVE-2021-21311)
  • 浅谈Zookeeper及windows下详细安装步骤
  • vite, vue3, vue-router, vuex, ES6学习日记
  • 25考研|660/880/1000/1800全年带刷计划
  • Mybatis基础教程及使用细节
  • 10 分钟在K8s 中部署轻量级日志系统 Loki