这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战
题1
最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例 1:
- 输入:nums = [10,2]
- 输出:"210"
示例 2:
- 输入:nums = [3,30,34,5,9]
- 输出:"9534330"
示例 3:
- 输入:nums = [1]
- 输出:"1"
示例 4:
- 输入:nums = [10]
- 输出:"10"
提示:
- 1 <= nums.length <= 100
- 0 <= nums[i] <= 109
相关标签
- 贪心
- 字符串
- 排序
暴力一点直接递归方法 时间上比较慢 :
class Solution:
def largestNumber(self, nums: List[int]) -> str:
res = ''
for i in range(len(nums) - 1):
for j in range(i + 1, len(nums)):
if int(str(nums[i]) + str(nums[j])) < int(str(nums[j]) + str(nums[i])):
nums[i], nums[j] = nums[j], nums[i]
res += str(nums[i])
res += str(nums[-1])
return '0' if int(res) == 0 else res
复制代码
执行结果:
题2
摆动排序 II
给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]... 的顺序。
你可以假设所有输入数组都可以得到满足题目要求的结果。
示例 1:
- 输入:nums = [1,5,1,1,6,4]
- 输出:[1,6,1,5,1,4]
- 解释:[1,4,1,5,1,6] 同样是符合题目要求的结果,可以被判题程序接受。
示例 2:
- 输入:nums = [1,3,2,2,3,1]
- 输出:[2,3,1,3,1,2]
提示:
- 1 <= nums.length <= 5 * 104
- 0 <= nums[i] <= 5000
- 题目数据保证,对于给定的输入 nums ,总能产生满足题目要求的结果
- 进阶:你能用 O(n) 时间复杂度和 / 或原地 O(1) 额外空间来实现吗?
相关标签
- 数组
- 分治
- 快速选择
- 排序
思路: 倒排 排序 计算中位数 进行插入
class Solution:
def wiggleSort(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
nums.sort(reverse=True)
ans = len(nums) // 2
nums[1::2],nums[0::2] = nums[:ans], nums[ans:]
复制代码
执行结果: