【LeetCode】HOT 100(23)

这篇具有很好参考价值的文章主要介绍了【LeetCode】HOT 100(23)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。

目录

题单介绍:

题目:448. 找到所有数组中消失的数字 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

题目:438. 找到字符串中所有字母异位词 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

写在最后:


题目:448. 找到所有数组中消失的数字 - 力扣(Leetcode)

【LeetCode】HOT 100(23),LeetCode HOT 100,leetcode,算法,c++

题目的接口:

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {

    }
};

解题思路:

这道题直接做的话并不难,

直接把这个数组存进哈希,然后再遍历,

看看有那个数字不在这个数组里面,push进要返回的数组就行:

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        set<int> st;
        vector<int> v;
        for(auto e : nums) st.insert(e);
        for(int i = 1; i <= nums.size(); i++) {
            if(st.find(i) == st.end()) v.push_back(i);
        }
        return v;
    }
};

但是这段代码因为用的是set,

所以并不是O(N)的时间复杂度,空间复杂度也是O(N),

题目有个进阶要求,

毕竟是简单题,我就去做了一下进阶,

如果想要达成进阶的要求,有一个很妙的解法:

思路如下:

第一遍遍历的时候,标记数组中有数字的位置,

打个比方就是,遍历到1,就把数组第一个位置标记,代表有这个数字,

如果遍历到7,就把数组第7个位置标记,代表有7这个数字,

这样子我们就知道哪些位置没有被标记。

第二次遍历数组,将没有标记的位置的数字存进数组并返回即可

代码如下:

代码:

class Solution {
public:
    vector<int> findDisappearedNumbers(vector<int>& nums) {
        int n = nums.size();
        for(int i = 0; i < n; i++) {
            nums[(nums[i] - 1) % n] += n;
        }
        vector<int> v;
        for(int i = 0; i < n; i++) {
            if(nums[i] <= n) v.push_back(i + 1); 
        }
        return v;
    }
};

过过过过啦!!!!

【LeetCode】HOT 100(23),LeetCode HOT 100,leetcode,算法,c++

题目:438. 找到字符串中所有字母异位词 - 力扣(Leetcode)

【LeetCode】HOT 100(23),LeetCode HOT 100,leetcode,算法,c++

题目的接口:

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {

    }
};

解题思路:

这道题是一道经典的滑动窗口题目,

滑动窗口的题目解题的思路基本上大同小异,

就是更新右边界,然后找到符合条件的子集之后,

计数或者是将题目要求的内容输入到数组里面之类的操作,

然后移动左边界,最后遍历完就可以返回了。

代码如下:

代码:

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        unordered_map<char, int> need, window;
        for(auto e : p) need[e]++;
        int left = 0, right = 0, cnt = 0;
        vector<int> ans;
        while(right < s.size()) {
            char r = s[right];
            right++;
            if(need.count(r) > 0) {
                window[r]++;
                if(window[r] == need[r]) {
                    cnt++;
                }
            }
            if(cnt == need.size()) ans.push_back(left);
            while(right - left >= p.size()) {
                char l = s[left];
                left++;
                if(need.count(l) > 0) {
                    if(window[l] == need[l]) {
                        cnt--;
                    }
                    window[l]--;
                }
            }
        }
        return ans;
    }
};

过过过过啦!!!!

【LeetCode】HOT 100(23),LeetCode HOT 100,leetcode,算法,c++

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-528968.html

到了这里,关于【LeetCode】HOT 100(23)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode 热题 HOT 100

    重点是当有一个链表为空了不单独处理,按节点为0处理。 滑动窗口! 首先要判断slow需不需要更新,怎么判断?slow = max(umap[s[fast]], slow);什么意思,就是说:**umap[s[fast]]的意义是,为了在slow和fast之间不出现重复字符,slow能处于的最左位置。**如图,当j第一次到d,将umap[s[j

    2024年02月07日
    浏览(46)
  • 【LeetCode】HOT 100(18)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:148. 排序链表 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过过

    2024年02月15日
    浏览(39)
  • 【LeetCode】HOT 100(20)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:621. 任务调度器 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过

    2024年02月16日
    浏览(39)
  • 【LeetCode】HOT 100(1)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:2. 两数相加 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过过过

    2024年02月08日
    浏览(39)
  • 【LeetCode】HOT 100(26)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:394. 字符串解码 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过

    2024年02月15日
    浏览(40)
  • 【LeetCode】HOT 100(2)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:5. 最长回文子串 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过

    2024年02月09日
    浏览(37)
  • 【LeetCode】HOT 100(11)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:64. 最小路径和 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过过

    2024年02月15日
    浏览(41)
  • 【LeetCode】HOT 100(14)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:85. 最大矩形 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过过过

    2024年02月16日
    浏览(39)
  • 【LeetCode】HOT 100(15)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:98. 验证二叉搜索树 - 力扣(Leetcode) 题目的接口: 解题思路: 代码:

    2024年02月11日
    浏览(61)
  • 【LeetCode】HOT 100(12)

    精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍: 题目:75. 颜色分类 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过过过过

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包