LeetCode-452. 用最少数量的箭引爆气球
一、C实现
1. 简介
参考: https://blog.csdn.net/zhizhengguan/article/details/124852708
先排序,然后再使用贪心算法,贪最大右边界。
2. C实现
#include <stdio.h> #define ARRAY_SIZE(arr) (sizeof(arr)/sizeof(arr[0])) int min_val(int x, int y) { return x < y ? x : y; } int max_val(int x, int y) { return x > y ? x : y; } void do_sort(int (*arr)[2], int sz) { int i, j; int t[2]; for (i = 0; i< sz; i++) { for (j = i; j < sz; j++) { if (arr[i][0] > arr[j][0]) { t[0] = arr[i][0]; t[1] = arr[i][1]; arr[i][0] = arr[j][0]; arr[i][1] = arr[j][1]; arr[j][0] = t[0]; arr[j][1] = t[1]; } } } /* for (i = 0; i< sz; i++) { printf("[%d, %d]\n", arr[i][0], arr[i][1]); } */ } int min_arrow_shot(int (*arr)[2], int sz) { int i, arrow = 1, mr = arr[0][1]; if (sz == 0) return 0; do_sort(arr, sz); //贪最大右边界 for (i = 1; i < sz; i++) { if (mr >= arr[i][0]) { mr = min_val(mr, arr[i][1]); } else { arrow++; mr = arr[i][1]; }; } return arrow; } int main() { int arr[][2] = { {2, 6}, {7, 9}, {5, 9}, {2, 5}, {10, 12}, {4, 8}, {10, 12}, }; int ret = min_arrow_shot(arr, ARRAY_SIZE(arr)); printf("ret=%d\n", ret); //3, 对应的上 return 0; }
posted on 2025-02-18 16:57 Hello-World3 阅读(8) 评论(0) 收藏 举报