最大数
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。
示例1:
输入:nums = [10,2]
输出:"210"
示例2:
输入:nums = [3,30,34,5,9]
输出:"9534330"
解题思路:
我们第一步需要明白一个事情,就是’102‘>’90‘意味整数类型一样成立,那么我们可以将列表数字转换为字符格式,方便我们进行拼接。使用list.sort()而里面有的参数cmp,如果cmp=1表示两两比较返回为正便交换两者位置。了解之后就不难写出一个判断x+y和y+x的函数并与sort()进行排序。这个题目还有需要注意的地方,就是可能会出现’00’这种情况,则需要特殊处理一下。
代码:
class Solution(object):
def largestNumber(self, nums):
"""
:type nums: List[int]
:rtype: str
"""
nums_Str = map(str,nums)
compare = lambda x,y : -1 if x+y>y+x else 1
nums_Str.sort(cmp=compare)
res = ''.join(nums_Str)
if res[0] == '0':
res = '0'
return res
摆动排序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]
解题思路:
满足 nums[0] < nums[1] > nums[2] < nums[3]顺序,可以使用交叉插入去实现。可以使用for循环进行相隔插入,即逆序交叉插入。
代码:
class Solution(object):
def wiggleSort(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
N,n = len(nums),len(nums) - 1
snums = sorted(nums)
for i in range(1,N,2): #逆序穿插
nums[i] = snums[n]
n -= 1
for i in range(0,N,2): #逆序穿插
nums[i] = snums[n]
n -= 1
return None