首页 > 编程语言 >代码随想录训练营的第二天(Python)| 977.有序数组的平方、209.长度最小的子数组

代码随想录训练营的第二天(Python)| 977.有序数组的平方、209.长度最小的子数组

时间:2023-10-12 21:25:41浏览次数:40  
标签:977 val min int sum nums 随想录 len 数组

977.有序数组的平方

暴力求解(O(n+logn))
class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        return sorted(i**2 for i in nums)
双指针(O(n))

由于列表是单调递增的,元素平方后的最大值要么在最前面,要么在最后面

class Solution:
    def sortedSquares(self, nums: List[int]) -> List[int]:
        l, r = 0, len(nums) - 1
        res = [float('inf')]*len(nums)
        i = len(nums) - 1    # 从列表最后面开始赋值
        while l <= r:
            if nums[l]**2 < nums[r]**2: # 比较左右指针指向的值,谁最大就选谁赋值
                res[i] = nums[r]**2
                r -= 1
            else:
                res[i] = nums[l]**2
                l += 1
            i -= 1
        return res

209.长度最小的子数组

暴力解法
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        n = len(nums)
        min_len = float('inf')
        for i in range(n):
            sum_val = 0
            for j in range(i, n):
                sum_val += nums[j]
                if sum_val >= target:
                    sub_len = j-i+1
                    min_len = min(min_len, sub_len)
                    break
        return min_len if min_len != float('inf') else 0
滑动窗口

什么时候缩小窗口

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        n = len(nums)
        s, e = 0, 0
        min_len = float('inf')
        sum_val = 0
        while e < n:
            sum_val += nums[e]
            while sum_val >= target: # 缩小窗口, 这里 为什么不为 if ,因为开始指针向右移动一个位后,还有可能 sum_val >= target
                min_len = min(min_len, e-s+1)
                sum_val -= nums[s]
                s += 1
            e += 1
        return min_len if min_len != float('inf') else 0

标签:977,val,min,int,sum,nums,随想录,len,数组
From: https://www.cnblogs.com/yixff/p/17760445.html

相关文章

  • 总结数组中常用的方法
    //改变原数组数组名.push(数据),返回数组的长度数组名.pop(),返回删除的那个数据数组名.unshift(数据),返回数组的长度数组名.shift(),返回删除掉的那个数据数组名.reverse(),返回翻转好的数组数组名.sort()会按照位排序,比如1,11,2;字符串会按照AscII码顺序单个比较字符数组名.sort(fu......
  • Scala学习(三)数组操作
    1、定长数组vara=newArray[String](10)vara=Array("zhangsan","lisi")2、变长数组ArrayBuffer相当于java的ArrayListimportscala.collection.mutable.ArrayBuffervara=ArrayBuffer[Int]()a+=1即向数组中放入一个元素值为1 a+=(1,2,3,4,5)a++=Array(6,7,8,9,10)a.tr......
  • 王道408---DS---线性表、栈、队列与数组
    错题2.21、题目中提到在第i个位置一般是指在下表为i的位置2、线性表元素的序号是从1开始,而在第n+1个位置插入相当于在表尾追加。静态链表树的双亲表示法就是使用了这种思想吧卡特兰数\[\text{}\frac1{n+1}C_{2n}^{n}\]栈的数学性质:n个不同元素进栈,出栈元素不同排列的个......
  • LeetCode Day02 977&209&59
    第一题是[977. 有序数组的平方]这题解题思路依旧可以用双指针,指针分别指向数组的头尾两端,然后对两端求乘积比较大小,把乘积值更大的存储到数组尾端,然后指针更新位置,代码如下。publicint[]sortedSquares(int[]nums){//res用于存储平方和结果int[]res=ne......
  • 152. 乘积最大子数组
    给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个32-位整数。子数组是数组的连续子序列。示例1:输入:nums=[2,3,-2,4]输出:6解释:子数组[2,3]有最大乘积6。代码......
  • 二维数组
    1.二维数组可以用行指针和列指针来表示行指针=数组指针;二维数组名就是第一行的首地址数组指针加1表示跳过整个指向的数组。 2.数组指针如何访问数组成员空间?p指向的是数组的地址,也就是&数组名,那么*p就是对取地址后的数组名再*操作,因为&与*为互逆操作,所以此时*p就等同于......
  • 树状数组模板
    namespaceBIT{ inttr[/*数据范围qwq*/],N; voidinit(intn){N=n;for(inti=1;i<=n;i++)tr[i]=0;} voidupdate(intx,inty){for(;x<=N;x+=(x&(-x)))tr[x]+=y;} intquery(intx){intres=0;for(;x;x-=(x&(-x......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    704.二分查找链接:https://leetcode.cn/problems/binary-search/description/思路:关键是定义清楚区间边界,想清楚middle在计算中是否可能取到左边界or右边界。若采用闭区间,则middle可能等于左/右边界值。27.移除元素链接:https://leetcode.cn/problems/remove-element/思路:暴......
  • 代码随想录算法训练营第一天(python) | 704. 二分查找、27. 移除元素。
    Leetcode704二分查找题目链接:704二分查找关键点思路:1、是否要进入到while部分的代码是left<=right还是left<right,看[left,right]是否是合法区间.例如[1,1]是合法区间,取<=;[1,1)非合法区间,取<。2、缩小区间时,考虑边界是否已经比较过。左闭右闭区......
  • mysql 删除数组 json 字段中的某个指定值
    例:SELECTcar_imgFROMlogistics_car_infoWHEREcar_id=2--结果为:["1","2","3","4"]SELECTJSON_SEARCH(car_img,'one','4')FROMlogistics_car_infoWHEREcar_id=2--结果为:"$[3]"SELE......