排序
以下为 LeetCode 排序 相关问题解法记录。
问题分析:为组成最大的数,即数字大的排序靠前,问题转化为一种特殊的排序。
边界情况:当数组中元素全部为0时,转换为字符串后只有一个0。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| class Solution {
func largestNumber(_ nums: [Int]) -> String {
var nums = nums
nums.sort{ String($0) + String($1) > String($1) + String($0) }
var result = ""
var flag = false
for i in nums{
if i != 0 {
flag = true
}
if flag {
result = result + String(i)
}
}
if result.count == 0 {
result = "0"
}
return result
}
}
|
启发:当数字转换为字符串时,尤其是拼接的情况,需要特殊处理开头连续的0。
问题分析:若a<b<c<d,则min(a,b) + min(c,d) > min(a,c) + min(b,d),所以按从小到大排序再求和。
代码:
1
2
3
4
5
6
7
8
9
10
| class Solution {
func arrayPairSum(_ nums: [Int]) -> Int {
let array = nums.sorted{$0 < $1}
var sum = 0
for i in 0..<array.count / 2 {
sum += array[i * 2]
}
return sum
}
}
|
积累:array.sort()
排序自身,array.sorted()
返回排序后数组。