6366.老人的数目
字符串操作, 时间复杂度:O(2n)
class Solution {
public:
int countSeniors(vector<string>& details) {
int cnt = 0;
for(auto s : details) cnt += (s.substr(11, 2)) > "60";
return cnt;
}
};
2679.矩阵中的和
模拟, 时间复杂度:O(nm2)
class Solution {
public:
static const int N = 510;
bool vis[N][N];
int matrixSum(vector<vector<int>>& nums) {
memset(vis, 0, sizeof vis);
int n = nums.size(), m = nums[0].size();
int res = 0;
for(int k = 0; k < m; k ++ ){
int score = -1;
for(int row = 0; row < n; row ++){
int maxv = -1, index;
for(int col = 0; col < m; col ++ ){
if(!vis[row][col] && maxv < nums[row][col]) maxv = nums[row][col], index = col;
}
vis[row][index] = true;
score = max(score, maxv);
}
res += score;
}
return res;
}
};
2680.最大或值
贪心 + 前缀和, 时间复杂度:O(n)
class Solution {
public:
static const int N = 1E5 + 10;
typedef long long ll;
ll pre[N], last[N];
long long maximumOr(vector<int>& nums, int k) {
memset(pre, 0, sizeof pre);
memset(last, 0, sizeof last);
int n = nums.size();
for(int i = 0; i < n; i ++ ){
if(i) pre[i] = nums[i] | pre[i - 1];
else pre[i] = nums[i];
}
for(int i = n - 1; i >= 0; i -- ){
if(i == n - 1) last[i] = nums[i];
else last[i] = last[i + 1] | nums[i];
}
ll res = 0;
for(int i = 0; i < n; i ++ ){
ll x = nums[i];
if(!i) res = last[1] | (x << k);
else res = max(res, pre[i - 1] | (x << k) | last[i + 1]);
}
return res;
}
};
2681.英雄的力量
贪心 + 前缀和, 时间复杂度:O(n)
class Solution {
public:
typedef long long ll;
static const ll MOD = 1E9 + 7;
int sumOfPower(vector<int>& nums) {
sort(nums.begin(), nums.end());
ll res = 0, S = 0;
for(auto x : nums){
ll u = x;
res = (res + ((S * ((u * u) % MOD)) % MOD) + (((u * u) % MOD) * u) % MOD) % MOD;
S = (S * 2 + u) % MOD;
}
return res;
}
};