2023年11月22日 星期三

[452] Minimum Number of Arrows to Burst Balloons

一開始想反了!覺得要從start開始去切,但其實是要從尾巴切才對!
覺得不妙啊  XD

int comp(const void *a, const void *b)
{
int *A= *(int**)a;
int *B= *(int**)b;
if (A[1]==B[1])
return 0;
else
return (A[1] > B[1]) ? (1) : (-1);
}
int findMinArrowShots(int** points, int pointsSize, int* pointsColSize) {
qsort((void *)points, pointsSize,sizeof (int**), comp);
int end , arrow=0;
for (int i=0;i < pointsSize; i++)
{
end = points[i][1];
while(points[i][0]<= end)
{
i++;
if (i==pointsSize)
break;
}
arrow++;
i--;
}
return arrow;
}
寫完覺得很慢,但看了一下別人的好像也沒有快多少?!
但總之~可以在for 裡面放if , 當新的區間出來的時候,
就把箭頭加一然後更新end 值,這樣也是可以的。不過初始值要改一下就是了
扣掉前面的compare,長這樣:
int findMinArrowShots(int** points, int pointsSize, int* pointsColSize) {
    qsort((void *)points, pointsSize,sizeof (int**), comp);
    int end, arrow=1;
    end = points[0][1];
    for (int i=0;i < pointsSize; i++)
    {
        if (points[i][0]> end)
        {
            arrow++;
            end = points[i][1];
        }
    }
    return arrow;
}

沒有留言:

張貼留言