题目来源:LeetCode
一、数组
1.寻找数组的中心索引
题目描述:给你一个整数数组nums ,请编写一个能够返回数组 “中心下标” 的方法。
数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。
如果数组不存在中心下标,返回 -1 。如果数组有多个中心下标,应该返回最靠近左边的那一个。
注意:中心下标可能出现在数组的两端。
思路:
先求和,然后再分别求左和和右和,如果左和和右和相等,则返回索引,否则执行完毕返回-1解答代码:
class Solution {
public int pivotIndex(int[] nums) {
int SumL=0,SumR,sum=0;
for(int i=0;i<nums.length;i++){sum+=nums[i];}
if(sum-nums[0]==0){return 0;}
SumR=sum;
for(int i=0;i<nums.length;i++)
{
SumL+=nums[i];
if(i!=0){SumR-=nums[i-1];}
if(SumL==SumR){return i;}
}
return -1;
}
}
重点:多种情况必须厘清,分情况设置判断条件
战绩截图:
2.搜索插入位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
思路:
二分法缩小查找范围,直到 l<=target, mid=target
解答代码:
class Solution {
public int searchInsert(int[] nums, int target) {
int l=0,r=nums.length-1,mid;
while(l<=r)
{
mid=(l+r)/2;
if(nums[mid]==target){return mid;}
else if(nums[mid]<target){l=mid+1;}
else{r=mid-1;}
}
return l;
}
}
重点:二分法搜索需要确定数组的边界
战绩截图:
二、二维数组
1.旋转矩阵
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 90 度。
思路:
使用数组newMatrix储存旋转后的结果,最后复制到原数组
解答代码:
class Solution {
public void rotate(int[][] matrix) {
int Max=matrix.length;
int[][] newMatrix=new int[Max][Max];
for(int i=0;i<Max;++i)
{
for(int j=0;j<Max;++j)
{
newMatrix[j][Max-1-i]=matrix[i][j];
}
}
for(int i=0;i<Max;++i)
{
for(int j=0;j<Max;++j)
{
matrix[i][j]=newMatrix[i][j];
}
}
}
}
重点:厘清旋转前后位置对应的数组下标变化