void down_update(long long* heap, int i, int n){
while(i * 2 <= n){
int ind = i, left = i * 2, right = i * 2 + 1;
if(heap[ind] > heap[left]) ind = left;
if(right <= n && heap[ind] > heap[right]) ind = right;
if(ind == i) break;
long long tem = heap[ind];
heap[ind] = heap[i];
heap[i] = tem;
i = ind;
}
return;
}
int nthUglyNumber(int n){
long long heap[100000];
heap[1] = 1;
int num = 1;
int ans = 0;
while(n--){
int flag = 0;
if(heap[1] % 5 == 0) flag = 5;
else if(heap[1] % 3 == 0) flag = 3;
else flag = 2;
switch(flag){
case 2 : heap[++num] = heap[1] * 2;
case 3 : heap[++num] = heap[1] * 3;
case 5 : heap[++num] = heap[1] * 5;
}
ans = heap[1];
heap[1] = heap[num--];
for(int i = num / 2; i >= 1; i--){
down_update(heap, i, num);
}
}
return ans;
}
leetcode-264:丑数II
于 2023-07-20 00:11:52 首次发布