代码随想录001

本文讨论了C++和Java中数组的不同特性,作者在学习过程中遇到的二分查找、循环结构(while和if)运用,以及数组平方排序、子数组问题和螺旋矩阵的实现。通过实例展示了如何使用while循环、快慢指针和双指针法解决问题。
摘要由CSDN通过智能技术生成

        之前看过几天,但当时随着一些事情就放下了,最近想着要去找实习,打算捡起来,还在犹豫报不报训练营,感觉整天忙,有感觉有时间...

        言归正传,今天看了数组,这个c以前就学过,就是一个空间,数组名代表数组的首地址,在c++是连续的地址,但在java不是(输出地址无规律)

        写二分法的时候发现自己一直在写判断语句,但是不知道怎么能实现一个循环判断的功能,感觉也能用for,但是不知道怎么循环,没写,改天可以试下。

        发现自己在用while 和if总是纠结,开头的整体区间,想着用if,但if执行的话只能执行一次,执行完成就跳出了,但是可能与一次的if并不能判断出,因此需要循环判断while。

        主要对while理解有问题,理解while的循环过程。感觉需要注意的是target值在数组中存在这个条件  2024.3.13记。

隔了几天又来了,重新做了二分法,发现区间的开闭会影响while的判断左闭右开,右边的开区间的数其实应该大于总数,因为取不到。而right作为数组的下标,因为下标从0开始,因此数组最大的下标数为right=nums.size()-1而如果为开区间应+1。

删除元素:

        暴力,遍历数组,当元素等于时赋值进行覆盖,但是要注意内循环的j如果是j<n判断时,如果用j+1,则超出数组范围。因此要用nums[j-1]=nums[j],而应该改变的值是i,即i=j-1,j=i+1。

        当将下一个值赋给第i位,执行完成外循环会导致i+1,但是此时的i位是以前的i+1,因此还需要判断此时的i,因此为了抵消i+1,执行i--,

        快慢指针法:快指针用来遍历整个数组,,慢指针对不需要删除的元素进行计数,注意slow++的位置(先将当前值保留,然后更改slow),注意在元素不需要删除时才slow++。

2024.3.16   没弄完,18弄。

数组平方排序,直接对数组平方,注意需要遍历所有元素,n<nums.size(),不-1,

排序,sort(nums.begin(),nums.end());

忘记了各种排序法,依次对比使用的选择排序法;冒泡排序,大的右移。

3.24

长度最小的子数组。暴力

        注意题目要求的是找出数组中的连续子数组>target,这个连续再这里降低了难度,否则会出现第一个元素与最后一个元素组成的子数组,子数组的可能性变多。

        通过两层循环解决,一层先找子数组的第一个元素(连续),找子数组不同首元素的最短子数组,找到第一个子数组后即跳出循环,因为后续长度只会增加,不是最短长度。

        代码随想录的是再内循环中对sum进行更新,令j=i,这样在内循环实现了sum的更新。

        也可以在外循环更新一次sum = nums[i],此时需要注意的是内循环是外循环这一层没有满足>条件下进行的,所以需要在外循环直接判断,如果满足则更新result。

        双指针法:感觉实际上还是双循环,先确定终止位置,然后通过while(sum>=target),遍历所有>=的子数组,随着起始点的增加,随之减小sublength=j-i+1,感觉其中这个sum=sum-nums[i++]有循环的感觉。

螺旋矩阵,首先创建n维矩阵,vector<vector<int>> res(n,vector<int>(n,0));   动态数组

不确定一般的创建数组行不?       通过输入值n确定数组维度

一般需要确定数组大小,动态数组可以在运行时确定数组的大小。

大致思路即保证每个边的遍历规则保持一致,此处是左闭右开

while的判断条件,一共旋转几圈,一整圈即占用两行两列,即总圈数为n/2(偶数),注意n为奇数,中间保留一个值,需要手动赋值。

在执行完循环后需要对起始以及边界条件进行更改。如startx++

不明白为什么奇数时res[mid][mid] = count;是上边已经加到了? 

答:res[i][j] = count++   先赋值再自增。

3.26

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值