思路
行星撞碎小行星时会累加质量,我们可以任意排列小行星的顺序。
很明显的贪心题。对小行星进行升序排序后,质量从小到大和行星相撞,让行星不断累加质量。
如果遇到某颗小行星比行星累计质量还大,那后面的小行星必然都会把这颗行星撞碎 ![]()
![]()
。
代码
class Solution {
public:
bool asteroidsDestroyed(int mass, vector<int>& asteroids) {
// 先按质量对小行星排序
sort(asteroids.begin(),asteroids.end());
// 排序后其实可以从小到大撞小行星
// 直至哪个小行星质量大于行星累计的质量
long long acc=mass;
for(int a:asteroids){
if(acc<a){
return false;
}
acc+=a;
}
return true;
}
};
Lvvvv (Lvvvv) 3
贪心排序就可以解决。数据范围小坑点。
class Solution {
public:
bool asteroidsDestroyed(int mass, vector<int>& asteroids) {
std::sort(asteroids.begin(),asteroids.end());
for(const auto& it : asteroids) {
if(mass < it) {
return false;
} else if(mass > 1e5) {
return true;
}
mass += it;
}
return true;
}
};
Qiansui (Qiansui) 4
小心爆 int ~
一不小心没注意,WA + 1 ![]()
class Solution {
public:
bool asteroidsDestroyed(long long mass, vector<int>& asteroids) {
sort(asteroids.begin(), asteroids.end());
for(auto& x : asteroids){
if(mass < x) return false;
mass += x;
}
return true;
}
};
Elbertoo (Elbert) 5
class Solution:
def asteroidsDestroyed(self, mass: int, asteroids: List[int]) -> bool:
asteroids.sort()
maxMass = asteroids[-1];
for m in asteroids:
if mass >= m:
mass += m
if mass >= maxMass: return True
else: return False
return True
偷看一眼最大的、超过它就直接返回
CPython (CPython) 6
class Solution:
def asteroidsDestroyed(self, mass: int, asteroids: List[int]) -> bool:
asteroids.sort()
if mass < asteroids[0]:
return False
n = len(asteroids)
pre = [mass] * (n + 1)
for i in range(n):
if pre[i] < asteroids[i]:
return False
pre[i+1] = pre[i] + asteroids[i]
return True
























