【数据结构与算法】之排序系列-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.hqwc.cn/news/450987.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二十二回 横海郡柴进留宾 景阳冈武松打虎-大模型ChatGLM2-6B新手速通

柴进说这人叫武松&#xff0c;排名老二。宋江说江湖上听说过武二郎的名字&#xff0c;幸会幸会&#xff0c;就拉着武松的手&#xff0c;一起喝酒吃饭。 武松是家喻户晓的打虎英雄&#xff0c;现在最流行的是大模型&#xff01; 大模型ChatGLM2-6B新手速通&#xff01; 人工智能…

路由器、路由器的构成、交换结构

目录 1 路由器 1.1 路由器的结构 “转发”和“路由选择”的区别 1.1.1 输入端口对线路上收到的分组的处理 1.1.2 输出端口将交换结构传送来的分组发送到线路 2.2 交换结构 2.2.1 通过存储器 2.2.2 通过总线 2.2.3 通过纵横交换结构 (crossbar switch fabric) 1 路由器…

【Iot】什么是串口?什么是串口通信?串口通信(串口通讯)原理,常见的串口通信方式有哪些?

串口通信原理 1. 串口2. 串口通信4. 波特率与比特率5. 帧格式3. 串口通讯的通讯协议3.1. RS2323.2. RS485 总结 1. 串口 串行接口简称串口&#xff0c;也称串行通信接口或串行通讯接口&#xff08;通常指COM接口&#xff09;&#xff0c;是采用串行通信方式的扩展接口。 串口可…

2024/1/30 dfs与bfs

想要了解dfs与bfs&#xff0c;就得了解队列和栈。 一、栈与队列 1.栈 栈说白了就是先入后出。把栈类比为一个容器。只有一个口&#xff0c;所以如果我们想要取出最底层也就是最先放入的元素&#xff0c;只能最后取出它。 栈基础操作有如下几种&#xff1a; push 放入pop 拿…

网络安全挑战:威胁建模的应对策略与实践

在数字威胁不断演变的时代&#xff0c;了解和降低网络安全风险对各种规模的组织都至关重要。威胁建模作为安全领域的一个关键流程&#xff0c;提供了一种识别、评估和应对潜在安全威胁的结构化方法。本文将深入探讨威胁建模的复杂性&#xff0c;探索其机制、方法、实际应用、优…

leetcode 1.两数之和(C++)DAY1(待补充哈希表法)

文章目录 1.题目描述示例提示 2.解答思路3.实现代码结果4.总结 1.题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&…

Quppy 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号

Quppy 注册教程,轻松通过欧洲银行同名转账绑定个人IBAN账号 官网下载APP或者去香港区下载APP使用 https://quppy.com/ch/ 按照官方APP里的邮箱注册&#xff0c;填写邀请代码258258 能提升审核成功率&#xff0c;后添加电话和个人信息&#xff1b;需要说明的是&#xff1a;网站…

力扣 第 123 场双周赛 解题报告 | 珂学家 | 二维偏序+单调队列优化

前言 执手看歌敲金钗&#xff0c;笑语落珠明眸睐。 忽然蝴蝶春风满&#xff0c;焉教冷镜瘦朱颜。 整体评价 T3是基于map的前缀和的变形题&#xff0c;T4是二维偏序的一道应用题。 题外话&#xff0c;力扣还是实现N久之前的承诺了&#xff0c;命名权奖励&#xff0c;赞一个。 …

VC++中使用OpenCV绘制直线、矩形、圆和文字

VC中使用OpenCV绘制直线、矩形、圆和文字 在VC中使用OpenCV绘制直线、矩形、圆和文字非常简单&#xff0c;分别使用OpenCV中的line、rectangle、circle、putText这四个函数即可。具体可以参考OpenCV官方文档&#xff1a;https://docs.opencv.org/4.x/index.html 下面的代码展…

通过手写简易版RPC理解RPC原理

RPC是什么 所谓的RPC其实是为了不同主机的两个进程间通信而产生的&#xff0c;通常不同的主机之间的进程通信&#xff0c;程序编写需要考虑到网络通信的功能&#xff0c;这样程序的编写将会变得复杂。RPC就来解决这一问题的&#xff0c;一台主机上的进程对另外一台主机的进程发…

jupyter notebook更改工作目录的2个细节

详细步骤参考知乎原文&#xff1a; 如何更改Jupyter Notebook的默认工作路径&#xff1f; - 知乎 (zhihu.com​​​​​​) 步骤4中需要删除 #符号和后面的空格&#xff01;一定要删除空格&#xff0c;否则会出现语法错误的报错 步骤5中&#xff0c;经过评论区提醒后&#xf…

三维重建方法3D gaussian splatting与NeRF的区别和异同

最近学习了一些三维重建相关的内容&#xff0c;目前比较主要的重建流派就是3DGS以及NeRF&#xff0c;NeRF作为2020年发布的文章轰动一时&#xff0c;影响深远&#xff0c;有很多NeRF based的相关工作在这些年涌现。3DGS作为2023年的new talk of the town&#xff0c;其在保证合…