-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1833_javascript.js
117 lines (105 loc) · 3.05 KB
/
1833_javascript.js
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
// 夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。
// 商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。Tony 一共有 coins 现金可以用于消费,他想要买尽可能多的雪糕。
// 给你价格数组 costs 和现金量 coins ,请你计算并返回 Tony 用 coins 现金能够买到的雪糕的 最大数量 。
// 注意:Tony 可以按任意顺序购买雪糕。
//
// 示例 1:
// 输入:costs = [1,3,2,4,1], coins = 7
// 输出:4
// 解释:Tony 可以买下标为 0、1、2、4 的雪糕,总价为 1 + 3 + 2 + 1 = 7
// 示例 2:
// 输入:costs = [10,6,8,7,7,8], coins = 5
// 输出:0
// 解释:Tony 没有足够的钱买任何一支雪糕。
// 示例 3:
// 输入:costs = [1,6,3,1,2,5], coins = 20
// 输出:6
// 解释:Tony 可以买下所有的雪糕,总价为 1 + 6 + 3 + 1 + 2 + 5 = 18 。
//
// 提示:
// costs.length == n
// 1 <= n <= 105
// 1 <= costs[i] <= 105
// 1 <= coins <= 108
/**
* @param {number[]} costs
* @param {number} coins
* @return {number}
*/
var maxIceCream = function (costs, coins) {
// 以下三种排序全都超时
// 冒泡
// for(let i=0; i<costs.length-1; i++){
// for(let j=i+1; j<costs.length; j++){
// if(costs[i] >costs[j]){
// [costs[i],costs[j]] = [costs[j],costs[i]]
// }
// }
// }
// 选择
// for(let i=0; i<costs.length; i++){
// let minIndex = i;
// for(let j=i+1; j<costs.length; j++){
// if(costs[minIndex] >costs[j]){
// minIndex = j;
// }
// }
// [costs[i],costs[minIndex]] = [costs[minIndex],costs[i]]
// }
// 快排
// function quickSort(arr) {
// if (arr.length <= 1) {
// return arr;
// }
// let middle = arr.splice(Math.floor(arr.length / 2), 1)[0];
// let left = [];
// let right = [];
// while (arr.length) {
// let item = arr.shift();
// if (item < middle) {
// left.push(item);
// } else {
// right.push(item);
// }
// }
// return quickSort(left).concat(middle, quickSort(right));
// }
// costs = quickSort(costs);
let res = 0;
let value = 0;
for (let i = 0; i < costs.length; i++) {
value += costs[i];
if (value <= coins) {
res++;
} else {
break;
}
}
return res;
};
// 计数排序
var maxIceCream = function (costs, coins) {
// i 为 价格区间 1 -100000
// temo[i] 为价格数量
let tempArr = new Array(10000).fill(0);
// 计算价格数量
for (let cost of costs) {
tempArr[cost]++;
}
let count = 0;
// 从价格1开始遍历
for (let i = 1; i <= 100000; i++) {
if (coins >= i) {
// 当 数量 超过最大可购买数量时
// 例 costs = [1,1,1] coins = 2
// 则 curCount = Math.min(tempArr[i], Math.floor(coins / i)) = Math.min(3,2) = 2
let curCount = Math.min(tempArr[i], Math.floor(coins / i));
count += curCount;
// 减去 单价 * 数量
coins -= i * curCount;
} else {
break;
}
}
return count;
};