1640. 能否连接形成数组

代码实现(哈希表)
class Solution {
public:
bool canFormArray(vector<int>& arr, vector<vector<int>>& pieces) {
unordered_map<int, int> dict;
int n = pieces.size();
for (int i = 0; i < n; i++) {
dict[pieces[i][0]] = i;
}
vector<int> curArr;
int curPtr = 0;
for (auto num : arr) {
if (curArr.empty() || curPtr == curArr.size()) {
if (!dict.count(num)) {
return false;
}
curArr = pieces[dict[num]];
curPtr = 1;
}
else if (curArr[curPtr] != num) {
return false;
}
else {
curPtr++;
}
}
return true;
}
};
1262. 可被三整除的最大和

代码实现(动态规划)
class Solution {
public:
int maxSumDivThree(vector<int>& nums) {
int N = nums.size();
int remainder[3] = {0};
int a,b,c;
for(int i = 0; i < N; i++){
a = remainder[0] + nums[i];
b = remainder[1] + nums[i];
c = remainder[2] + nums[i];
remainder[a%3] = max(remainder[a%3], a);
remainder[b%3] = max(remainder[b%3], b);
remainder[c%3] = max(remainder[c%3], c);
}
return remainder[0];
}
};
948. 令牌放置

代码实现(贪心)
class Solution {
public:
int bagOfTokensScore(vector<int>& tokens, int power) {
sort(tokens.begin(), tokens.end());
if (tokens.empty() || power < tokens[0]) return 0;
int l = 0, r = tokens.size() - 1;
int score = 0;
while (l <= r) {
if (power >= tokens[l]) {
power -= tokens[l];
score++;
l++;
}
else if (l == r) return score;
else {
power += tokens[r--] - tokens[l++];
}
}
return score;
}
};