首页 > 其他分享 >LeetCode刷题笔记(Day3)【滑动窗口+螺旋矩阵】

LeetCode刷题笔记(Day3)【滑动窗口+螺旋矩阵】

时间:2025-01-13 17:00:49浏览次数:3  
标签:right string int Day3 ++ ans left LeetCode 刷题

题号:

        【注意】:数组所有元素之和都小于target时,要设置返回0,否则会返回INT_MAX 

                76 有示例没过去,贴在文章后面啦,希望有大佬可以解惑

                Q1:边界如何处理?保持处理区间左闭右开【遵循循环不变量原则

                Q2:转几圈?n/2圈

                Q3:当n%2==1时,填补中心位置(n/2,n/2)=count;

常用string函数:

76未AC代码:

class Solution {
public:
    bool check(string a, string b){//检查a中是否包含b
        std::vector<int> an(200);
        std::vector<int> bn(200);
        for(int i = 0; i < a.size(); i ++){
            an[int(a[i])] ++;
        }
        for(int i = 0; i < b.size(); i ++){
            bn[int(b[i])] ++;
        }
        for(int i = 0; i < 99; i ++){
            if(an[i] < bn[i]) return false;
        }
        return true;
    }


    string minWindow(string s, string t) {
        string res = "";//存储结果
        int left = 0;//左指针
        string ans = "";//存储中间状态
        int La = 0;//ans长度
        int Lr = INT_MAX;//res长度
        for(int right = 0; right < s.size(); right ++){
            ans = s.substr(left, right - left + 1);//取窗口中的字符串作为中间状态
            cout<<"ans1:"<<ans<<endl;
            while(check(ans, t)){//ans包含t时,检查窗口是否可以缩小,left右移
                La = ans.size();
                if((La < Lr) && (check(ans, t))){//如果ans满足条件,先存储在res中
                    res = ans;
                    Lr = res.size();
                }
                left ++;//窗口右移
                if (left > right) break;//【防止substr右溢出】
                ans = s.substr(left, right - left + 1);//ans更新
                cout<<"ans2:"<<ans<<endl;
                cout<<"res:"<<res<<endl;
            }
        }
        return res;
    }
};

测试结果:

标签:right,string,int,Day3,++,ans,left,LeetCode,刷题
From: https://blog.csdn.net/weixin_46127108/article/details/145097374

相关文章

  • 力扣leetcode 416.分割等和子集 动态规划 0-1背包
    题目:给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例1:输入:nums=[1,5,11,5]输出:true解释:数组可以分割成[1,5,5]和[11]。示例2:输入:nums=[1,2,3,5]输出:false解释:数组不能分割成......
  • 代码随想录刷题第五天
    今日任务  242.有效的字母异位词  349. 两个数组的交集  202. 快乐数 1. 两数之和 242.有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。示例 1:输入:s="anagram",t="nagaram"输出:true示例......
  • LeetCode热题100-两数相加【JavaScript讲解】
    题目:题解:根据题目(2->4->3)+(5->6->4)=(7->0->8),根据加法的计算过程我们知道首先从低位开始算起,也就是说应该先计算2+5=7;4+6=10,向前进一位,此处取余数0;3+4+进一位的1=8;所以答案是7->0->8。最关键的是最后的进位一定要记得,如果最后相加的和需要进位!!!解题代码:/***......
  • LeetCode100之分割回文串(131)--Java
    1.问题描述        给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。        示例1输入:s="aab"输出:[["a","a","b"],["aa","b"]]    示例2 输入:s="a"输出:[["a"]]        提......
  • LeetCode 2275: 按位与结果大于零的最长组合题解
    LeetCode2275:按位与结果大于零的最长组合题解1.题目分析这道题目考察了位运算的基本概念和应用。我们需要在给定的数组中找出最长的子序列,使得这些数字进行按位与运算后的结果大于0。1.1关键概念按位与运算(&)两个二进制位都为1时,结果为1。只要有一个为0,结果就为0......
  • LeetCode:65.有效数字
    LeetCode:65.有效数字解题步骤构建一个表示状态的图。遍历字符串,并沿着图走,如果到了某个节点无路可走就返false。遍历结束,如走到3/5/6,就返回true,否则返回false。extend281016进制/***检查一个字符串是否可以表示为一个有效的数字*@param{string}s-待检查的字......
  • leetcode2902 和带限制的子多重集合的数目
    给定数组nums[n]和整数l,r,nums中的元素可能会重复,要求从nums中选择若干个元素,其元素和在[l,r]内,有多少种不同方案,结果对1E9+7取模。注:空集合的结果为0,相等的元素之间没有区别。1<=n<=2E4;0<=nums[i]<=2E4;sum(nums[i])<=2E4;0<=l<=r<=2E4分析:1、存在相等元素,且没有区别,可以......
  • LeetCode:112.路径总和
    LeetCode:112.路径总和解题思路在深度优先遍历的过程中,记录当前路径的节点值的和。在叶子节点处,判断当前路径的节点值的和是否等于目标值。解题步骤深度优先遍历二叉树,在叶子节点处,判断当前路径的节点值的和是否等于目标值,是就返回true。遍历结束,如果没有匹配,就返回false。varh......
  • THUWC 2020 Day3 题解
    Cache一致性协议按照学习手册最后的模拟。\(\text{Exclusive}/\text{Shared}\)只有编号最小的返回,但都要改变状态。\(\text{Modified}\)的所有的都要返回且改变状态。Cache替换算法这里说一下\(\text{PLRU}\)算法。对于每次,先找是否命中。如果是否,就在二叉搜索树上......
  • LeetCode:102.二叉树的层序遍历
    LeetCode:102.二叉树的层序遍历解题思路层序遍历顺序就是广度优先遍历。不过在遍历时候需要记录当前节点所处的层级,方便将其添加到不同的数组中。/***Definitionforabinarytreenode.*functionTreeNode(val,left,right){*this.val=(val===undefined?0:......