1.二分查找
重点区分左闭右开,左闭右闭两种写法中的差异,理解循环中的不变量,这样在return r还是l和什么时候l+1 r-1什么时候不需要+1-1很重要。
2.移除元素——双指针
暴力解法就是n^2复杂度,遇到一个,把后面的全都往前移来覆盖。双指针的思路就是把数组分开成两部分,左边的都不是目标值,右边都是目标值,右指针搜索整个数组,左指针只负责在遇到非目标值时再覆盖并更新
3.长度最小子数组——滑窗 or 前缀和+二分
首先O(n)的滑窗很直观,主要探讨一下nlogn的二分,将数组“积分”成前缀和形式,此时是一个递增数组,比如target = 10,对于原数组中第n个数,只需要寻找该数之后的前缀和数组中,值为target+sum[n-1]的即可。sum可定位len(num)+1,sum[1] = 0+num[0]
trick:C++中,最大可写成INT_MAX 最小INT_MIN
4.螺旋矩阵——比较绕的模拟题
59. 螺旋矩阵 II - 力扣(LeetCode)这一题可用代码随想录中的方法解决,保持一种写法(左闭右开)到底,不容易乱
54. 螺旋矩阵 - 力扣(LeetCode)这一题不一定是n*n的矩阵了,用上面的方法我试了一下会出问题,我参考了一个左闭右闭写法的,很巧妙,也是初始化最上层,最下层,最左和最右,最上层跑完后,直接+1,认为丢掉第一行,假如此时+1之后,最上层>最下层,直接break;左右同理;
标签:矩阵,随想录,C++,LeetCode,力扣,数组,左闭 From: https://www.cnblogs.com/sun-secretbase/p/17090315.html