Leetcode 48. 旋转图像
解题思路:
代码实现:
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();
for(int i = 0; i < n / 2; i ++)
for(int j = 0; j < (n + 1) / 2; j ++){
int tmp = matrix[i][j];
matrix[i][j] = matrix[n - 1 - j][i];
matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
matrix[j][n - 1 - i] = tmp;
}
}
};
Leetcode 240. 搜索二维矩阵 II
思路:Z 字形查找
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int n = matrix.size(), m = matrix[0].size();
int i = 0, j = m - 1; // 从右上角开始
while (i < n && j >= 0){
if(matrix[i][j] == target) return true;
else if(matrix[i][j] > target) j --;
else i ++;
}
return false;
}
};
Leetcode 3137. K 周期字符串需要的最少操作次数
错因,因为最后的结果一定是从idx=0开始长度为k的子串不断重复的,所以代码的枚举部分一定是i+=k,且i从0开始枚举。
class Solution { public: int minimumOperationsToMakeKPeriodic(string word, int k) { unordered_map<string, int> hash; int len = word.length(); int maxlen = 0; for(int i = 0; i + k <= len; i += k){ hash[word.substr(i, k)] ++; maxlen = max(maxlen, hash[word.substr(i, k)]); } return (len - maxlen * k) / k; } };