代码随想录算法训练营第一天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

977.有序数组的平方


文档讲解:代码随想录(programmercarl.com)

视频讲解:双指针法经典题目 | LeetCode:977.有序数组的平方

状态:ac

用时:0.5h

    思路:原数组是由小到大排序,由于是用数组元素的平方排序,故绝对值越大的平方越大,其绝对值顺序是分三种情况:

    1. 由大到小,则数组所有元素小于等于0;

    2. 由小到大,则数组所有元素大于等于0;

    3. 由大到小,再由小到大,则数组元素前半部分小于等于0,后半部分大于等于0。

    第三种情况作为更一般的情况,第一二种情况作为第三种情况的特殊情况。两边都有较内侧更大的值,因此可以从数组两侧同时遍历,将平方数更大的放到新数组。

    我的代码:

图1 我的代码1

    卡哥的代码:

图2 卡哥代码1

    比较:可以看见,我的代码虽然思路是对的,但是整洁度和可读性更差。同时,没必要把a == b单独列出来,因为a与b之间的数字的平方一定是小于a和b的,a和b的平方一定会在新数组排一起的。


 209.长度最小的子数组


文档讲解:代码随想录(programmercarl.com)

视频讲解:拿下滑动窗口! | LeetCode 209 长度最小的子数组

状态:ac

用时:1h

思路:看到连续子数组的时候,就可以考虑一下滑动窗口的方法了。当子数组和大于等于target时,窗口从左开始缩小直至小于target,当小于窗口时,向右扩大窗口直至大于等于target。这个过程中不断比较最小的长度。

我的代码:

图3 我的代码2

卡哥代码

图4 卡哥代码2

比较:卡哥代码更为精干,从我和卡哥代码中,我可以看出我和卡哥理解的不同,卡哥的思想是移动窗口,即在窗口每移动一步,寻找满足要求的最小子序列。而我的代码所表现出来的理解其实不算滑动窗口,而是缩放窗口,通过缩放达到移动的目的。


 59.螺旋矩阵II


文档讲解:代码随想录(programmercarl.com)

视频讲解:一入循环深似海 | LeetCode:59.螺旋矩阵II

状态:自己没ac,看了一下别人的ac了

用时:1.5h

思路:每一条边左闭右开的规则,每次循环分四次来为矩形的边进行赋值。

问题:思路是有的,但是落实到写代码方面,就出问题,需要看看别人的代码的架构来实现,代码能力较差。

图5 我的代码


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容