Every day a leetcode
题目来源:2126. 摧毁小行星
解法1:贪心
对于两个不同质量的小行星,优先摧毁质量较小的小行星可以摧毁更多的小行星。
所以,基于贪心的思想,将小行星按质量从小到大排序,遍历数组,依次让行星跟它们发生碰撞,每次判断即可:
- 当mass<某个小行星质量时,返回 false;
- 如果遍历完成,则说明所有小行星均可摧毁,此时我们返回 true。
代码:
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
bool asteroidsDestroyed(int mass, int* asteroids, int asteroidsSize){
qsort(asteroids,asteroidsSize,sizeof(int),cmpfunc);
for(int i=0;i<asteroidsSize;i++)
{
if(mass<asteroids[i]) return false;
mass+=asteroids[i];
}
return true;
}
结果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/7773a54d6ff74ffcad742a7d5a993f43.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVWVzdGNYaXll,size_20,color_FFFFFF,t_70,g_se,x_16) 啊哦,mass 爆 int 了。改成 long 就行了。看提示,所有小行星的质量总和可能超过 32 位有符号整数的上界。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/e7b55e7c2f32437d85f2e25ecf6b9a3a.png)
代码:
int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
bool asteroidsDestroyed(int mass, int* asteroids, int asteroidsSize){
long m=mass;
qsort(asteroids,asteroidsSize,sizeof(int),cmpfunc);
for(int i=0;i<asteroidsSize;i++)
{
if(m<asteroids[i]) return false;
m+=asteroids[i];
}
return true;
}
结果: ![在这里插入图片描述](https://img-blog.csdnimg.cn/1dd03a0485f24ebdb4e875b2bd4f3702.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVWVzdGNYaXll,size_20,color_FFFFFF,t_70,g_se,x_16)
|