本日记为个人的刷题学习日记,内容非原创,仅为自己复习知识时,能够看得懂自己写的CV的代码,快速理解题意。另外,👍力扣官方的题解很好用,三叶姐🍭nb!!!!!
nums
,请计算数组的中心下标;
// 计算数组的总和,把中心点当做滑动块,左右两边重量为left、right
// 每次滑动一格, left加上新增的元素, right等于sum - left - 减少的元素
class Solution {
public int pivotIndex(int[] nums) {
int sum = 0;
int len = nums.length;
for(int i=0; i<nums.length; i++) {
sum += nums[i];
}
int left = 0;
int right;
for(int i=0; i<len; i++) {
right = sum - left - nums[i];
if(left == right){
return i;
} else {
left = left + nums[i];
}
}
return -1;
}
}
// 二分法
// 最后跳出循环的模拟 假设 此时在下标为3 4 的区间 数值分别是9和12 target为10 数值应当插入下标4的位置
// mid = 3; nums[mid] < target (9<10); left = mid + 1; 此时left==right==4
// 再一次循环 nums[mid] > target (12>10) right = mid - 1; 此时right为3 left为4 返回left
class Solution {
public int searchInsert(int[] nums, int target) {
int len = nums.length;
int left = 0;
int right = len - 1;
while(left <= right) {
int mid = left + ((right - left) >> 1);
if(target == nums[mid]) {
return mid;
} else if(target < nums[mid]) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return left;
}
}
7,4,1
,原矩阵从下往上数第一列为7,4,1
class Solution {
public void rotate(int[][] matrix) {
int len = matrix.length;
int[][] matrix_new = new int[n][n];
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++) {
matrix_new[j][len - i - 1] = matrix[i][j];
}
}
for (int i = 0; i < len; ++i) {
for (int j = 0; j < len; ++j) {
matrix[i][j] = matrix_new[i][j];
}
}
}
}
class Solution {
public void rotate(int[][] matrix) {
int len = matrix[0].length;
int temp;
// 先上下翻转
for(int i =0; i<len/2; i++) {
for(int j=0; j<len; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[len-1-i][j];
matrix[len-1-i][j] = temp;
}
}
// 再沿对角线翻转
for(int i=0; i<len; i++) {
for(int j=0; j<i; j++) {
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
}