首页 > 编程语言 >代码随想录算法训练营Day2|209.长度最小的子数组 59.螺旋矩阵

代码随想录算法训练营Day2|209.长度最小的子数组 59.螺旋矩阵

时间:2024-10-03 16:24:20浏览次数:8  
标签:count 59 nums 209 随想录 len start range offset

学习资料:https://programmercarl.com/数组总结篇.html#数组的经典题目

移动窗格,首尾指针根据条件变化
模拟行为,循环不变量(左闭右闭或左闭右开)整个过程保持一致

学习记录:
209.长度最小的子数组(用while使得尾指针遍历全部;用while实现,当[首:尾]之和>目标值,才移动首指针;为了求最小长度,先设置最小长度为正无穷float('inf'))

点击查看代码
class Solution(object):
    def minSubArrayLen(self, target, nums):
        """
        :type target: int
        :type nums: List[int]
        :rtype: int
        """
        begin=0
        end=0
        sum=0
        min_len=float('inf')   #设置为无穷大,方便找到最小值
        while end < len(nums):
            sum += nums[end]
            while sum >= target:
                sum -= nums[begin]
                sub_l=end-begin+1
                min_len = min(sub_l, min_len)
                begin += 1
            end += 1
        if min_len != float('inf'):
            return min_len
        else:
            return 0

59.螺旋矩阵(边界值很多,有初始横纵指针、左闭右开需要从n剪掉的offset、从1开始计数的count;当奇数阶矩阵,中间多出来的1项单独设置;螺旋转的圈数为n//2)

点击查看代码
class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        start_x = 0
        start_y = 0
        nums = [[0]*n for _ in range(n)]
        cycle, mid = n//2, n//2
        offset=1
        count=1
        for c in range(cycle):
            for j in range(start_y, n-offset):
                nums[start_x][j]=count
                count += 1
            for i in range(start_x, n-offset):
                nums[i][n-offset]=count 
                count += 1
            for j in range(n-offset, start_y, -1):
                nums[n-offset][j]=count
                count += 1
            for i in range(n-offset, start_x, -1):
                nums[i][start_y] = count
                count += 1
            start_x += 1
            start_y += 1
            offset += 1
        if n%2 != 0:
            nums[mid][mid]=count
        return nums

PS:
螺旋矩阵好绕啊,被9个数字给绕麻了
今天阴天,好冷,终于要放假了

标签:count,59,nums,209,随想录,len,start,range,offset
From: https://www.cnblogs.com/tristan241001/p/18445759

相关文章

  • 代码随想录算法训练营 | 122.买卖股票的最佳时机II,55. 跳跃游戏,45.跳跃游戏II,1005.K次
    122.买卖股票的最佳时机II题目链接:122.买卖股票的最佳时机II文档讲解︰代码随想录(programmercarl.com)视频讲解︰买卖股票的最佳时机II日期:2024-10-03想法:本来还在想什么时候买股票,结果只需要考虑每天的正收益累加就是最大的收益了。Java代码如下:classSolution{public......
  • 南沙C++信奥赛陈老师解一本通题 2099:【23CSPJ普及组】公路(road)
    ​ 2099:【23CSPJ普及组】公路(road)时间限制:1000ms      内存限制:524288KB提交数:3793   通过数: 1575【题目描述】小苞准备开着车沿着公路自驾。公路上一共有 nn 个站点,编号为从 11 到nn。其中站点 ii 与站点i+1i+1 的距离为vivi 公里。......
  • P4859
    如果不能越级打怪还叫什么主角#include<bits/stdc++.h>namespacemy_std{ usingnamespacestd;#definerep(i,x,y)for(inti=(x);i<=(y);i++)#definedrep(i,x,y)for(inti=(x);i>=(y);i--)#definego(x)for(inti=head[x];i;i=edge[i].nxt) constlonglongmod......
  • 代码随想录算法训练营day7|704.二分查找、27.移除元素、977.有序数组的平方
    学习资料:https://programmercarl.com/数组理论基础.html理解:双指针可以同时获取一个数组的两个位置的值二分查找:根据区间范围(左闭右闭、左闭右开)来判断左右指针比较方式刷题记录:704.二分查找(左闭右闭则<=,左右指针,middle=left+(right-left)//2,因为考虑了等号情况所以下一步l......
  • [lnsyoj2359] 密码
    题意给出两个数\(a,b\),给出\(T\)个询问,每个询问求给出的排列能否通过某种置换变换而成,且给出的两个值可以通过加或减\(a,b\)的操作得到。满足输出Yessol由于\(a,b\)进行互相加减的操作不会改变两值的最大公约数,因此计算最大公约数并判断即可。前半段问题可以转换为......
  • 59_初识搜索引擎_搜索相关参数梳理以及bouncing results问题解决方案
    1、preference决定了哪些shard会被用来执行搜索操作_primary,_primary_first,_local,_only_node:xyz,_prefer_node:xyz,_shards:2,3bouncingresults问题,两个document排序,field值相同;不同的shard上,可能排序不同;每次请求轮询打到不同的replicashard上;每次页面上看到的搜索......
  • 代码随想录算法训练营 | 贪心算法:455.分发饼干,376. 摆动序列,53. 最大子序和
    455.分发饼干题目链接:455.分发饼干文档讲解︰代码随想录(programmercarl.com)视频讲解︰分发饼干日期:2024-10-02想法:大饼干喂大孩子Java代码如下:classSolution{publicintfindContentChildren(int[]g,int[]s){Arrays.sort(g);Arrays.sort(s);......
  • 代码随想录算法训练营 | 491.递增子序列,46.全排列,47.全排列 II
    491.递增子序列题目链接:491.递增子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰491.递增子序列日期:2024-10-02想法:根据题目nums[i]的范围在-100到100,可以用数组做记录是否同一层使用过Java代码如下:classSolution{List<Integer>path=newArrayList<>();......
  • 代码随想录算法-回溯4
    题目1491.非递减子序列给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例1:输入:nums=[4,6,7,7]输出:[[4,6],[4......
  • 代码随想录算法训练营第六天|242.有效的字母异位词 ● 349. 两个数组的交集 ● 202.
    ​学习链接:https://programmercarl.com/哈希表理论基础.html学习笔记:遇到“要判断一个值是否在集合中出现过”的问题时,可以考虑hash表。hash表的形式包括数组、set、dict。当数的位数比较统一、或比较小,可用数组,快;当数的位数可变,可用set;当要同时考虑数的下标和值,可以用dict。......