难度简单1307
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解题思路:删除数组的0,补充相同个数的0到列表末尾。
代码:
class Solution:
def moveZeroes(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(nums.count(0)):
nums.remove(0)
nums.append(0)
难度中等423
给你一个整数数组 nums
,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1] 输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0] 输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
解题思路:数组排序,这道题是用于熟悉各种排序算法的。然而数组太大,使用原始的冒泡、选择、插入排序算法都会超时...
代码:
# 冒泡排序
def sortBuble(self, nums: List[int]) -> List[int]:
n = len(nums)
for i in range(n - 1):
not_changed = True
for j in range(n - i - 1):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
not_changed = False
if not_changed:
break
return nums
# 选择排序
def sortSelect(self, nums: List[int]) -> List[int]:
n = len(nums)
for i in range(n - 1):
min_index = i
for j in range(i + 1, n):
if nums[j] < nums[min_index]:
min_index = j
nums[i], nums[min_index] = nums[min_index], nums[i]
return nums
# 归并排序
def sortMerge(self, nums: List[int]) -> List[int]:
n = len(nums)
for i in range(1, n):
tmp = nums[i]
j = i
while j > 0 and nums[j - 1] > tmp:
nums[j] = nums[j - 1]
j -= 1
nums[j] = tmp
return nums
难度中等324
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: "102"
示例 2:
输入: [3,30,34,5,9]
输出: "3033459"
提示:
0 < nums.length <= 100
说明:
- 输出结果可能非常大,所以你需要返回一个字符串而不是整数
- 拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0
解题思路:比较两数字组合成的新数字大小,如果原本组合的数字更大就交换两数的顺序,最后输出字符串形式的结果。
代码:
class Solution:
def minNumber(self, nums: List[int]) -> str:
n = len(nums)
for i in range(n):
for j in range(i,n-1):
len1 = len(str(nums[j]))
len2 = len(str(nums[j+1]))
if (nums[j]*(10**len2)+nums[j+1])>(nums[j+1]*(10**len1)+nums[j]):
nums[j], nums[j+1] = nums[j+1], nums[j]
print(nums[j],nums[j+1])
res = ""
for i in range(n):
res+=str(nums[i])
return res