Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- EC2
- leetcode
- Python
- terraform
- EKS
- Django
- K8S
- IAC
- AZURE
- docker
- ebs
- POD
- Service
- event loop
- AWS
- DevOps
- dockerfile
- intervals
- FastAPI
- 자바스크립트
- AZ-900
- asyncio
- Network
- WSGI
- Deployment
- elasticsearch
- Kubernetes
- 쿠버네티스
- ansible
- asgi
Archives
- Today
- Total
궁금한게 많은 개발자 노트
[ leetcode ] 1046. Last Stone Weight 본문
우선순위 큐를 사용하여 가장 큰 두 돌을 꺼내 같으면 둘 다 제거하고, 차이가 있다면 큰 돌의 무게에서 작은 돌의 무게를 빼서 다시 큐에 넣어 마지막 남은 돌의 무게를 반환하는 문제입니다. 만약 모두 제거되었다면 0을 반환합니다.
#define swap(a,b,t)((t) = (a), (a) = (b), (b) = (t))
class Solution {
public:
int heap[31] = {0,};
int heap_size = 0;
void insert_heap(int item) {
heap[++heap_size] = item;
int current = heap_size;
int temp;
while (current /2 >= 1 && heap[current] > heap[current/2]) {
swap(heap[current], heap[current/2], temp);
current /= 2;
}
}
int pop_heap() {
int item = heap[1];
heap[1] = heap[heap_size--];
int current = 1;
int child = 2;
int temp;
while (child <= heap_size) {
if (child < heap_size && heap[child] < heap[child+1]) child++;
if (heap[current] > heap[child]) break;
swap(heap[current], heap[child], temp);
current = child;
child *= 2;
}
return item;
}
int lastStoneWeight(vector<int>& stones) {
for (int i = 0; i < stones.size(); i++) insert_heap(stones[i]);
while (heap_size > 1) {
int one = pop_heap();
int two = pop_heap();
if (one != two) insert_heap(one-two);
}
return heap_size ? pop_heap() : 0;
}
};
'Algorithm' 카테고리의 다른 글
[ leetcode ] 1288. Remove Covered Intervals (0) | 2023.05.02 |
---|---|
[ leetcode ] 56. Merge Intervals (0) | 2023.05.02 |
[ leetcode ] 236. Lowest Common Ancestor of a Binary Tree (0) | 2023.05.02 |
[ leetcode ] 235. Lowest Common Ancestor of a Binary Search Tree (0) | 2023.05.02 |
[ 자료구조 ] Heap (0) | 2020.06.14 |
Comments