江苏网站优化,世界搜索引擎大全,做网站服务器空间,南康区建设局网站这里写目录标题 一、414. 第三大的数二、448. 找到所有数组中消失的数字三、561. 数组拆分四、594. 最长和谐子序列 一、414. 第三大的数
简单 给你一个非空数组#xff0c;返回此数组中第三大的数。如果不存在#xff0c;则返回数组中最大的数。
示例 1#xff1a; 输入返回此数组中第三大的数。如果不存在则返回数组中最大的数。
示例 1 输入[3, 2, 1] 输出1 解释第三大的数是 1 。
示例 2 输入[1, 2] 输出2 解释第三大的数不存在, 所以返回最大的数2 。
示例 3 输入[2, 2, 3, 1] 输出1 解释注意要求返回第三大的数是指在所有不同数字中排第三大的数。 此例中存在两个值为 2 的数它们都排第二。在所有不同数字中排第三大的数为1 。
def func414(nums):nums.sort()nums list(set(nums))if len(nums) 3:return nums[-1]else:return nums[-3]nums [3, 2, 1]
res func414(nums)
print(res)二、448. 找到所有数组中消失的数字
简单
给你一个含 n 个整数的数组 nums 其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字并以数组的形式返回结果。
示例 1 输入nums [4,3,2,7,8,2,3,1] 输出[5,6]
示例 2 输入nums [1,1] 输出[2]
提示 n nums.length 1 n 105 1 nums[i] n 进阶你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
def func448(nums):print(set(range(len(nums) 1)))return list(set(range(1, len(nums) 1)) - set(nums))nums [4, 3, 2, 7, 8, 2, 3, 1]
res func448(nums)
print(res)
三、561. 数组拆分
简单
给定长度为 2n 的整数数组 nums 你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), …, (an, bn) 使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。
示例 1 输入nums [1,4,3,2] 输出4 解释所有可能的分法忽略元素顺序为
(1, 4), (2, 3) - min(1, 4) min(2, 3) 1 2 3(1, 3), (2, 4) - min(1, 3) min(2, 4) 1 2 3(1, 2), (3, 4) - min(1, 2) min(3, 4) 1 3 4 所以最大总和为 4
示例 2
输入nums [6,2,6,5,1,2] 输出9 解释最优的分法为 (2, 1), (2, 5), (6, 6). min(2, 1) min(2, 5) min(6, 6) 1 2 6 9
思路 我们先研究一个整数队(a,b)假设里面较小的是a那么无论b多大累加到答案中的就只是a 因此我们构造(a,b)时使这两个元素之差尽可能地小才能尽可能地“不浪费”较大的b 那么方法就出来了直接对原始数组排个序相邻元素两两成对即可。
def func561(nums):nums.sort()print(nums)ans 0for i in range(0, len(nums), 2):ans nums[i]return ansnums [6, 2, 6, 5, 1, 2]
print(func561(nums))四、594. 最长和谐子序列
简单
和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在给你一个整数数组 nums 请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。
示例 1 输入nums [1,3,2,2,5,2,3,7] 输出5 解释最长的和谐子序列是 [3,2,2,2,3]
示例 2 输入nums [1,2,3,4] 输出2
示例 3 输入nums [1,1,1,1] 输出0
思路首先将数组排序得到递增数组 然后进行遍历一次数组利用双指针实现类似滑动窗口的功能
def func594(nums):nums.sort()print(nums)l 0ans 0for r in range(len(nums)):while nums[r] - nums[l] 1:l 1if nums[r] - nums[l] 1:ans max(ans, r - l 1)return ansnums [1, 3, 2, 2, 5, 2, 3, 7]
print(func594(nums))