总结leetcode中三道关于数组的简单题
1、1010:总持续时间可被60整除的歌曲
解法一(超出时间限制):
class Solution {
public:
int numPairsDivisibleBy60(vector<int>& time) {
unsigned int sum = 0;//可以被60整除的歌曲对的数量
for(int i = 0; i < time.size() - 1; i++){
if(time[i] < 1 || time[i] > 500)
continue;
for(int j = i + 1; j < time.size(); j++){
if((time[i] + time[j]) % 60 == 0)
sum++;
}
}
return sum;
}
};
这里的时间复杂度是O(n^2)级。最简单的想法,遍历数组,找每个i后面的j是否符合两数之和可被60整除。
解法二:
class Solution {
public:
int numPairsDivisibleBy60(vector<int>& time) {
unsigned int sum = 0;//可以被60整除的歌曲对的数量
int record[60] = {
0};//存储各个余数对应的歌曲数目
for(int t : time){
t %= 60;
if(t != 0)
sum += record[60-t];
else
sum += record[t];
record[t]++;
}
return sum;
}
};
时间复杂度为O(n)级,主要思想是,用一个数组来存储各个数对60的余数,余数之和为60的数对即可被0整除。注意余数为0的情况。
2、1013:将数组分成和相等的三个部分
解法一(超出时间限制):
class Solution {
public:
bool canThreePartsEqualSum(vector<int