力扣第319场周赛
1.温度转换
力扣https://leetcode.cn/problems/convert-the-temperature/
直接返回题目所要求的值即可
class Solution {
public:
vector<double> convertTemperature(double celsius) {
return {celsius + 273.15, celsius * 1.80 + 32.00};
}
};
2.最小公倍数的倍数为K的子数组
力扣https://leetcode.cn/problems/number-of-subarrays-with-lcm-equal-to-k/枚举所有子数组并计算最小公倍数即可
class Solution {
public:
int subarrayLCM(vector<int>& nums, int k) {
int n = nums.size();
int ans = 0;
for (int i = 0; i < n; i++) {
long long l = nums[i];
for (int j = i; j < n; j++) {
long long g = gcd(l, nums[j]);
l = l / g * nums[j];
if (l == k) ans++;
else if (l > k) break;
}
}
return ans;
}
};
力扣第91场双周赛
力扣https://leetcode.cn/problems/number-of-distinct-averages/利用双指针遍历数组,将每一次的平均值存入visited中,最后输出visited的长度即可
class Solution {
public:
int distinctAverages(vector<int>& nums) {
int n = (int)nums.size();
sort(nums.begin(), nums.end());
unordered_set<double> visited;
int l = 0;
int r = n - 1;
while (l < r){
double cur = ((double)nums[l] + nums[r]) / 2;
l ++;
r --;
visited.insert(cur);
}
return (int)visited.size();
}
};
2.统计构造好字符串的方案数
力扣https://leetcode.cn/problems/count-ways-to-build-good-strings/
递推式为:f[i] = f[i - zero] + f[i - one],初值为 f[0] = 1,答案就是 f[low] + f[low + 1] + ... + f[high]
class Solution {
const int MOD = 1e9 + 7;
public:
int countGoodStrings(int low, int high, int zero, int one) {
long long f[high + 1];
memset(f, 0, sizeof(f));
f[0] = 1;
for (int i = 1; i <= high; i++) {
if (i >= zero) f[i] = (f[i] + f[i - zero]) % MOD;
if (i >= one) f[i] = (f[i] + f[i - one]) % MOD;
}
long long ans = 0;
for (int i = low; i <= high; i++) ans = (ans + f[i]) % MOD;
return ans;
}
};