Day2 双指针 || 滑动窗口 || 区间定义

1. 977有序数组的平方

  • 题目
  • 讲解本题我的解法没有看该讲解,是看的力扣里代码随想录的解法,同时结合下面评论指出unshift性能不好

1.1思路

看到题的时候还是想着用快慢指针,但是这个题引出了另一种两个指针的用法,也就是双指针,因为该非递减数组只看绝对值的话是从两头像中间变小的,所以就在两头放两个指针,然后比较大小,谁大push谁到res的数组里。
其实思维有点被局限在原地了,因为前一天做的双指针的题都是快慢指针,而且大部分要求原地修改数组,本题并未要求只能操作原来数组

1.2 tips

  • for循环条件是for(let i=0,j=nums.lenght-1;i<=j)后面的++或者--可以不写,是放在了循环体内部了。
  • 记得先化成绝对值,js里用:Math.abs()
  • 能用const记得用const
  • array的unshift()性能不好,因为是往数组头添加元素,时间复杂度O(n),不如用push()之后reverse(),尽管reverse也是O(n)但是只用一次

1.3 另一思路:暴力破解

平方完了直接比大小排序就行了

  • js中array有sort方法,但是该方法不同于C,他是把元素转为字符串按字符顺序排序,所以要对int排序,要结合js的arrow function,即:array.sort((a,b) => a-b)这样sort就多次调用这个比较方法,传入代比较的a和b,返回值大于0则a大,把b放前面
  • sort()时间复杂度是O(nlogn)因为是快速排序.

2. 209长度最小的子数组

2.1思路:滑动窗口

正常暴力思路是两个for循环嵌套,第一个for负责起始位置,内层负责终止位置

  • 说是滑动窗口,本质也是双指针,只是这次取的两个指针中间的集合

双指针不管是哪种变形,本质都是用一个for完成两个for的内容

对于暴力破解,外层控制起点,内层控制终点,那如果设计成双指针,一个负责start一个负责end,如果让for循环里的i还是代表start,那和暴力破解的思路其实就一样了。
这题的难点就在于,for的i代表的是end终点,让终点往前走,加和超过target之后在让start往前走,变成了一个窗口的整体向前滑动。

2.2 tips

  • res要先设定个最大值,不然怎么动态更新
    思路是let res =Infinity;然后满足条件的话更新res = Math.min(res,end-start+1);然后sum要减去当前start位,从而继续让start往后判断
    最后返回res === Infinity?0:res;

3. 59螺旋矩阵2

看到题的时候读题都读错了,以为是一行一行画的

3.1思路

没有涉及到算法,就是个模拟转圈的问题,难点在对于区间的划分要一直保持,就像前面做二分法的题一样,循环不变量,说白了就是对每条边的处理规则要统一,我的理解是每次循环的判断条件要一致。这里画圈如果保持左闭右开,就要让拐角处交给新边来画

容易犯的错误就是每条边处理方式不一样,说再具体点就是拐点,比如第一条边两个guardian都处理了,第二条边就从第二个数开始处理到最后一个拐点,第三条边又变成只处理第二个到倒数第二个了,所以每条边处理逻辑不一样的话,要考虑的情况会变的特别复杂。

3.2 tips

  • 判断奇数:n%2 == 1
  • js里/是不会取整的,所以奇数/2得到的是浮点数,所以要除以二拿整数有两个方法:
    1. Math.floor()该方法在坐标轴上向下取整(便于理解负数)
    2. 用位运算,也会取整n >> 1
  • 循环次数是 n>>1次,找规律也能找出来
  • js里新建二维数组的方法:new Array(n).fill(0).map(()=>new Array(n).fill(0));
    1. 这里用fill(0)是因为js里0是基础数据类型,而数组是引用数据类型,如果这里写成fill([]),那fill的每个数组因为是引用数据类型,所以如果你此时push一个arr[0].push['1'],整个一维数组的n个元素都会变成1
    2. 用.map处理后就没关系

3.2实现

真写起来之后发现全是问题。

let center = res[mid][mid]想在最后判断的时候改center值,才发现res返回的center部分动都没动..这种错误太低级了;

每次loop最后忘记修改offset值;

row对应startX,不是startY;

count初始值设成0;(设习惯了)

offset初始值设成0;(设习惯了)

对于下面的行和左边的列,判断条件都错写成了>0,而不是对应的startX/Y

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容