1 class Solution { 2 public: 3 bool threeConsecutiveOdds(vector<int>& arr) { 4 int n = arr.size(); 5 for (int i = 1; i < n - 1; i++) { 6 if ((arr[i - 1] % 2) && (arr[i] % 2) && (arr[i + 1] % 2)) return true; 7 } 8 return false; 9 } 10 };
1 class Solution { 2 public: 3 int minOperations(int n) { 4 int ans = 0; 5 int mid = (n + 1) / 2; 6 for (int i = 1; i <= n; i++) { 7 ans = ans + abs((2 * i + 1 ) - (2 * mid + 1)); 8 } 9 return ans / 2; 10 } 11 };
C 两球之间的磁力
二分答案,最大化最小值,很经典的题目了
1 class Solution { 2 public: 3 bool check(vector<int>& p, int mid, int m) { 4 int cnt = 1, prep = p[0], j = 1; 5 int n = p.size(); 6 while (j < n) { 7 if ((p[j] - prep) >= mid) { 8 cnt++; 9 prep = p[j]; 10 } 11 j++; 12 } 13 return cnt >= m; 14 } 15 int maxDistance(vector<int>& position, int m) { 16 sort(position.begin(), position.end()); 17 int l = 0, r = 1e9 + 10, mid, ans = -1; 18 while (l <= r) { 19 int mid = (l + r) / 2; 20 if (check(position, mid, m)) { 21 ans = max(ans, mid); 22 l = mid + 1; 23 } else { 24 r = mid - 1; 25 } 26 } 27 return ans; 28 } 29 };
记忆化搜索,因为数据可能给到2e9,所以用map存储。
1 class Solution { 2 public: 3 map<int,int> mp; 4 int minDays(int n) { 5 if (n <= 2) return n; 6 if(mp.count(n)) return mp[n]; 7 int res1 = minDays(n / 3) + 1 + n % 3; 8 int res2 = minDays(n / 2) + 1 + n % 2; 9 return mp[n] = min(res1, res2); 10 } 11 };