classSolution { public: intsumOfMultiples(int n){ int res = 0; for (int i = 1; i <= n; i++) { if (i % 3 == 0) { res += i; } elseif (i % 5 == 0) { res += i; } elseif (i % 7 == 0) { res += i; } } return res; } };
classSolution { public: vector<int> getSubarrayBeauty(vector<int>& nums, int k, int x){ int n = nums.size(); vector<int> res; vector<int> cnt(101); for (int i = 0; i < n; i++) { cnt[nums[i] + 50]++; int tot = 0; if (i >= k - 1) { for (int j = 0; j <= 100; j++) { if (tot <= x && tot + cnt[j] >= x) { if (j < 50) { res.emplace_back(j - 50); } else { res.emplace_back(0); } break; } tot += cnt[j]; } cnt[nums[i - k + 1] + 50]--; } } return res; } };
6392. 使数组所有元素变成 1 的最少操作次数
给你一个下标从 0 开始的 正 整数数组 nums 。你可以对数组执行以下操作 任意 次:
选择一个满足 0 <= i < n - 1 的下标 i ,将 nums[i] 或者 nums[i+1] 两者之一替换成它们的最大公约数。
classSolution { public: intminOperations(vector<int>& nums){ int n = nums.size(); int val = nums[0]; for (auto v : nums) { val = __gcd(val, v); } if (val > 1) { return-1; } vector<int> arr; for (int i = 0; i < nums.size(); i++) { if (nums[i] == 1) { arr.emplace_back(i); } } if (arr.size() > 0) { return n - arr.size(); } int tot = n; for (int i = 0; i < n; i++) { int val = nums[i]; for (int j = i; j < n; j++) { val = __gcd(val, nums[j]); if (val == 1) { tot = min(tot, j - i); break; } } } return tot + n - 1; } };