分发饼干

https://leetcode-cn.com/problems/assign-cookies/

  1. int compare(const void * a, const void * b);
  2. int findContentChildren(int* g, int gSize, int* s, int sSize){
  3. qsort(g, gSize, sizeof(int), compare);
  4. qsort(s, sSize, sizeof(int), compare);
  5. int i = 0, j = 0, count = 0;
  6. while(i < gSize && j < sSize){
  7. if(s[j] >= g[i]){
  8. //能满足
  9. count++;
  10. j++;
  11. i++;
  12. }
  13. else j++;
  14. }
  15. return count;
  16. }
  17. int compare(const void * a, const void * b){
  18. const int * m = (const int *)a;
  19. const int * n = (const int *)b;
  20. if(*m < *n)
  21. return - 1;
  22. else return 1;
  23. }

柠檬水找零

https://leetcode-cn.com/problems/lemonade-change/

bool lemonadeChange(int* bills, int billsSize){
    int five = 0;
    int ten = 0;
    for(int i = 0; i < billsSize; i++){
        if(bills[i] == 5)
            five++;
        else if(bills[i] == 10){
            ten++;
            if(five < 1)
                return false;
            five -= 1;
        }
        else{
            if(ten > 0){
                ten--;
                if(five < 1)
                    return false;
                five -= 1;
            }
            else{
                if(five < 3)
                    return false;
                five -= 3;
            }
        }
    }
    return true;
}

无重叠区间

https://leetcode-cn.com/problems/non-overlapping-intervals/

int compare(const void * a, const void * b);

int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
    qsort(intervals, intervalsSize, sizeof(int *), compare);
    int right = intervals[0][1];
    int count = 0;
    for(int i = 1; i < intervalsSize; i++){
        if(intervals[i][0] >= right){
            right = intervals[i][1];
        }
        else count++;
    }  
    return count;
}

int compare(const void * a, const void * b){
    int ** m = (int **)a;
    int ** n = (int **)b;
    if(*(*m + 1) > *(*n + 1))
        return 1;
    else return -1;
}

用最少数量的箭引爆气球

https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/

int compare(const void * a, const void * b);

int findMinArrowShots(int** points, int pointsSize, int* pointsColSize){
    qsort(points, pointsSize, sizeof(int *), compare);
    int count = 1;
    int i = 0;
    while(i < pointsSize){
        int j = i;
        while(j < pointsSize && points[j][0] <= points[i][1])
            j++;
        if(j == pointsSize)
            return count;
        else{
            //左边界比箭所在的右边界大,射不到
            count++;
            i = j;
        }
    }
    return count;
}

int compare(const void * a, const void * b){
    const int ** m = (const int **)a;
    const int ** n = (const int **)b;
    if(*(*m + 1) < *(*n + 1))
        return -1;
    else return 1;
}

合并区间

https://leetcode-cn.com/problems/merge-intervals/