代码随想录算法训练营 day02
目录
977.有序数组的平方
最开始的想法是用循环先实现数组元素的平方,再写个双层循环实现排序操作.但是我觉得这样效率肯定很低,可是我也想不出其它办法,看了文章说双指针,想起昨晚还写了使用双指针解题,但是今天我依然不会灵活使用它,脑子里面想的还是和上一题的动画一样.
看了文章的文字描述和动画演示,我就去自己实操,哈哈,问题来了,数组怎么定义我都忘了,琢磨了好久,最开始我以为应该就是这样写的,但是把整个代码执行,直接报错啦,蒙蔽的我只有去看看正解代码的数组定义,然后再测试和提交,第一次没有通过,因为我的while循环条件没写左右下标相等的情况,光是脑子想也想不出过所以然,还是多在纸上画画吧.这道题完成的整个过程我觉得很不错,比我最初想用双循环解题,甚至还没想到直接调用排序的函数好多了,指针得多加练习,加油.
正解:
class Solution {
public int[] sortedSquares(int[] nums) {
int i=0,j=nums.length-1,k=nums.length-1;
int[] result=new int[nums.length];
while(i<=j){
if(nums[i]*nums[i]<nums[j]*nums[j]){
result[k--]=nums[j] * nums[j];
//参与了result数组的新元素添加的下标要移动一次
j--;
}else{
result[k--]=nums[i] * nums[i];
i ;
}
}
return result;
}
}
209.长度最小的子数组
最开始我是怎么想的呢?玩了会手机 都有点记不起了 ...印象中最大的难点就是怎么比较本次长度和上次记录的长度,从而在循环结束时拿到最小的长度.我写了if语句 但是我觉得放在那里都不合适,改过去改过来,还是不会..接着我就去看了文章里面的代码怎么写的,一开始我看到 res=res<nLength ? res:nLength; 其实不是很能理解,我在想res一开始应该有个有意义的值啊,不然怎么比较啊,我始终觉得res第一次就因该存放第一次满足条件得到的长度值,但是这样想法的代码,我怎么写都不会,后来我终于理解了文章里面的 int result = INT32_MAX; 这个就是取一个超大值,保证数组里面的相加长度不会超出它,就可以在 [? :] 语句中拿到有意义的长度值了.而且我觉得这个代码处理最后没有得到最小长度的思路也很棒 反之我觉得我目前的实力是想不出来的 哈哈哈.
还有一点就是 处理下一个窗口的思路,我自己想的是 j--,i ,然后再下一次循环中,得到一个窗口;看了文章里面的处理方式,我觉得很厉害,sum -=nums[i ]; 一句话就搞定了,放在while循环里面更是完美,因为想到时间复杂度o(n),我就以为有了for循环那就不要再来个while循环了,复杂度这块还是没学好,我觉得还挺难的,,,,
正解:
class Solution {
public int minSubArrayLen(int target, int[] nums) {
//滑动窗口,只用一个for循环,这个循环的索引作为终止位置
int i=0;
int sum=0;
int res=2147483647;//int最大值
int nLength=0;
for(int j=0;j<nums.length;j ){
sum =nums[j];
while(sum>=target){
nLength=(j-i 1);
res=res<nLength ? res:nLength;
sum -=nums[i ];
}
}
return res==2147483647 ? 0:res;
}
}
59.螺旋矩阵
正解:
class Solution {
public int[][] generateMatrix(int n) {
int[][] res=new int[n][n];//
int loop=0,start=0,count=1;//loop:循环次数 start:起点 count:填充数字
int i,j;
while(loop < (n/2)){
//走完上右下左四边,保持左闭右开[只处理左边]的原则
for(j=start;j<n-loop;j )
res[start][j]=count ;
for(i=start;i<n-loop;i )
res[i][j]=count ;
for(;j>start;j--)
res[i][j]=count ;
for(;i>start;i--)
res[i][j]=count ;
//走完了,起点就递增,进入内圈
start ;
}
//处理奇数矩阵中,圈圈走完了,还有中心点没有赋值
if(n%2==1) res[start][start]=count;
return res;
}
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgghjkk
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13