有序数组的平方
class Solution {
public int[] sortedSquares(int[] nums) {
int result[]=new int[nums.length];//新建一个数组
int k=result.length-1;//新数组从右边开始遍历
int i=0;//左指针
int j=nums.length-1;//右指针
while(i<=j)//包括=,因为如果是奇数的话就少了中间那个数没有比较
{
if(nums[i]*nums[i]>nums[j]*nums[j]){
result[k--]=nums[i]*nums[i];//从两边开始比较,将平方后大的放在新数组最右边
i++;//左指针向右移动
}
else{
result[k--]=nums[j]*nums[j];//包括了nums[i]平方=nums[j]平方的情况
j--;//右指针向左移
}
}
return result;
}
}
长度最小的子数组
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//双指针滑动窗口。j表示的终止位置进行遍历,i表示的起始位置。
//j遍历使滑动窗口的总和等于大于目标值的时候,i表示的起始位置开始向后移动直至窗口内总和小于目标值。
int result=Integer.MAX_VALUE;//max值方便比较出较小的值
int i=0;
int sum=0;//窗口内数字总和
int sublength=0;//最小长度
for(int j=0;j<nums.length;j++)//终止的指针遍历一遍数组
{
sum+=nums[j];//将窗口内的数字相加
while(sum>=target)
{
sublength=j-i+1;//窗口内的元素个数
result=result>sublength?sublength:result;//比较选出最小的元素个数
sum=sum-nums[i];//动态计算滑动窗口的值
i++;
}
}
return result==Integer.MAX_VALUE?0:result;
}
}
螺旋矩阵
class Solution {
public int[][] generateMatrix(int n) {
int[][] nums=new int[n][n];
int starty =0;
int startx =0;//左闭右开的规律进行螺旋
int count=1;//进行赋值
int offset=1;
int loop=0;//控制循环次数
int i,j;
while(loop++<n/2){//转了n/2圈
for(j=startx;j<n-offset; j++){//假设n=4,则需要转2圈,第一圈的j(控制列)需要小于4-1=3。满足左闭右开进行螺旋
nums[startx][j]=count++;//第一圈第一行赋值
}
for(i=starty;i<n-offset; i++){
nums[i][j]=count++;//第一圈第一个列赋值
}
for( ;j>starty;j--){
nums[i][j]=count++;//第一圈最下面一行
}
for( ;i>startx;i--){
nums[i][j]=count++;//第一圈最左边一列
}
starty++;
startx++;
offset++;//进入第二圈
}
if(n%2==1){//若是奇数,将最后剩下的中间的位置进行赋值
nums[startx][starty]=count;
}
return nums;
}
}
笔记
心得
做螺旋矩阵的时候我依靠自己应该想不出来转的圈数。。。while控制循环的次数感觉把握不好。loop++<n/2是硬凑出来的。。。