算法题T4

本文最后更新于:3 个月前

从n个正整数中找出满足如下条件的组合数量,满足条件:1个数或者2个数之和,大于等于n,每个数最多组合一次

例如:输入[3, 7, 1, 5, 9],n = 8,输出:3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/*

*/
let input = [3, 7, 1, 5, 9]
print("输入:", input)
let n = 8
print("输入:", n)
// 先从小到大排序
var sInput = input.sorted { e1, e2 in
return e1 > e2 ? false : true
}
var count = 0
// 先筛选单个数字满足条件的
var nInput: [Int] = []
for e in sInput {
if e >= n {
count += 1
} else {
nInput.append(e)
}
}
sInput = nInput;
while sInput.count >= 2 {
// 存储需要剔除的元素索引值
var cl: [Int] = []
// 使用最大值+最小值进行判断
let last = sInput[sInput.count - 1]
for i in 0 ..< (sInput.count - 1) {
let e = sInput[i];
if (e + last) >= n {
count += 1
cl.append(i);
cl.append(sInput.count - 1);
break
} else {
cl.append(i);
}
}
for e in cl.reversed() {
sInput.remove(at: e)
}
}
print("输出:", count)
1
2
3
输入: [3, 7, 1, 5, 9]
输入: 8
输出: 3