这里写目录标题
- 一、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)) # 3
diff = total - sum(nums) # 1
return [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 -1
res = 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 = 0
for j in range(len(nums)):
if nums[j] % 2 == 0:
nums[i], nums[j] = nums[j], nums[i]
i += 1
return 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 = 0
j = 1
while i < len(nums) and j < len(nums):
if nums[i] % 2 == 0:
i += 2 # 如果nums[0]为偶数,i+2
elif nums[j] % 2 == 1:
j += 2
else:
nums[i], nums[j] = nums[j], nums[i]
return nums
s = 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 0
res = Solution()
nums = [1, 2, 1, 10, 2]
print(res.largestPerimeter(nums))