一、997有序數組的平方
1、法一(直接排序)
這個題先按自己的思路寫了一下,不過是直接用的具體例子,沒有想到能用雙指針的方法,用的就是最普通的周遊和排序,如下圖
後來看力扣官網給出的解答,發現這種方法可以用更簡單的寫法來寫,确實精簡了很多,一行代碼即可完成
2、法二(雙指針法)
卡哥版:(這個好這個好,看這個!)
為什麼會想到雙指針法呢?首先這是個有序數組,但是有正數負數之分,是以平方之後最大值一定在兩邊,越往中間的部分越小,故可以考慮雙指針法,i指向起始位置,j指向終止位置。
用兩個指針分别指向位置 00 和 n-1n−1,每次比較兩個指針對應的數,選擇較大的那個逆序放入答案并移動指針。這種方法無需處理某一指針移動至邊界的情況。
這裡需要注意ans = [-1]*n,聯系到昨天學過的數組的知識點,用替代的方法将新元素寫入數組中
力扣版:(不喜歡這個!)
二、209長度最小的子數組
滑動視窗法解決,本質上也是雙指針法,核心在于動态調整子序列的起始位置
卡哥寫法:
力扣寫法:
最後一行的簡化寫法可以學習一下
三、59螺旋矩陣II
力扣官方題解削微有點難了解,不貼了就。主要思想就是統一成左閉右開的區間,不要有重複元素,一圈一圈周遊,然後放入nums中。
手撕代碼,以n=3和n=4為例:
說白了中間的四個for循環就是正方形的四條邊上的元素,最外面的for循環是一共有幾層的那個層數。手寫一遍之後思路清晰了許多~
n=3:
n=4: