数组2 滑动窗口 螺旋矩阵

对于今天的数组专题一共刷了3题

有两题是自己可以暴力做,但是想不到更好的方法。

那么就来总结一下刷题收获吧

首先第一题:将所有数平方并且排序

用到了双指针,一个在左边,一个在右边

每一次循环进行一次平方,并且比较,如果左边的大就把最大值赋值给新数组,并且left++

然后开始第二次的循环

如果右边的大那么把右边的赋值给新数组,并且right--

注意循环的条件是left<=right 

下面是第二题:涉及到滑动窗口

开始是语言创建两个指针i,j

通过for循环i先不动,j不断往上加 直到sum>=目标值

然后开始while循环,i网上加j不动,直到sum<=目标值

在while中保存最短的值

退出while循环后j继续网上加直到再次满足while的情况,或者到达最右边

第三题:螺旋矩阵

这题刚开始看到还是有点害怕的,但是这不太应该

其实硬写还是可以写出来的,就是胆子太小了,不相信自己,所以又看了题解

本质思想:循环条件的选择,循环不变量原则,新位置的开始值

这道题目:

定义一个新位置的开始值很重要(也就是转完一圈后的新位置值)也就是对角线从(0,0)到(1,1).......等

这个新位置每次新循环开始都要给他赋值

然后就是循环不变量,这里选择了左闭右开的原则,只要一直遵循这个原则还是很好写的。

接下来就是循环条件的选择,在这道题目中,i为行,j为列

所以在转第一笔的时候:i不变,j++,并且j < n - offset (offset是控制循环位置的值,每次加1)

在转第二笔的时候:由于j已经加到了最右边,所以j不需要变。i++,i<n - offset

在转第三笔的时候:i和j都到达了顶,所以不需要赋值,直接j--,并且j > startx

在转第四笔的时候:j位置到了左下,i往上升,所以i--,i > starty

四笔转完,一圈也就转完了,下面直接改新坐标i和j的

然后开始新的一圈

直到n/2次结束

还需要判断是否为寄,为奇数那么就最后把count赋值到中间位置就可以啦

反思:两天做了五道题目  感觉自己的胆子太小了,大脑没有创新,老是想着暴力做题

总结:

数组和指针关系很大,我们可以灵活利用双指针来操作数组里面的元素。

然后在螺旋矩阵中我发现了初始化的重要新和变量定义的重要性

在敲代码的时候要注意一个点,我是程序的创新这,我需要管理的是程序运行的过程,我把程序给他,他帮我计算。所以在一个程序中,需要我计算的数量越少越好。可以用变量来完成我需要操控的这个动作。

最后是说说收获吧:

首先双指针的滑动窗口真的很巧妙

结论:在用来判断一个连续的范围时可以外面一层for里面一层while这样可以让后面的数字追回来,而且计算复杂度不会加太多(前提是:连续片段)

循环不变量一定要记住,在做题目的过程中不要老是修改自己的想法。坚定一个算下去

还有就是初始化还是很重要的。变量记得写

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值