首先就是暴力解法,直接对所有元素进行平方,最后排序即可。(代码如下)
其次是双指针法,利用双指针分别从数组左右出发,来得到最终结果。需要注意的是,在利用双指针时for循环的条件,i++以及j--的位置是在if条件语句中的,是因为i++/j--是在经过判断数组最左端和最右端的元素哪个更大的条件下成立的,因此不被定义在for循环条件内部。(代码如下)
暴力解法:时间复杂度O(nlog n);
双指针法:时间复杂度O(n)。
其实这道题目也是比较基础的,但是还是需要认真分析题目所包含的信息。如果存在不理解的也可以进一步搭配视频食用,但是只要用心对待就还是容易哒(✿◕‿◕✿)
同样是两种解法。暴力解法是通过两个for循环,不断寻找符合题给条件的子序列,从而得到最终结果。
滑动窗口(其实也是双指针法)通过一个for循环去实现,不断地调整子序列的初始位置和终止位置得到最终结果。因为只使用一个for循环,因此是用for循环来表示终止位置,而窗口的大小就是长度大于等于target值的子序列,故而此时的难点就是起始位置如何去移动。因此我们使用while语句去实现起始位置的移动(为什么不用if,因为如果用if只判断一次就结束了,而此时我们需要动态的去更新这个窗口的值,即需要它去不断靠近target值)。具体代码如下:
暴力解法:时间复杂度O(n^2);滑动窗口:时间复杂度O(n)。
-
LeetCode 59.螺旋矩阵II
-
文章讲解: 代码随想录(programmercarl.com)
-
视频链接:二分法 | LeetCode 59.螺旋矩阵II_哔哩哔哩_bilibili
-
思路
-
要坚持循环不变量原则,同时通过对顺时针画矩阵的过程:即上行从左到右,右列从上到下,下行从右到左,左列从下到上。由外向内一圈一圈这么画下去。因此区间必须要遵循一个左闭有开的原则。代码实现如下:
其实这道题本身的思想并不复杂,只是代码看起来有点冗长,所以需要耐心对待(ಥ _ ಥ)
其实根据题目:target共有三种情况:target 在数组范围的右边或者左边;target 在数组范围中,且数组中不存在target;target 在数组范围中,且数组中存在target。所以这道题就可以使用二分法去寻找右边界或者是左边界来实现。(寻找右边界代码如下: