Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【LeetCode 热题 100】只出现一次的数字 / 多数元素 / 颜色分类 / 寻找重复数

【LeetCode 热题 100】只出现一次的数字 / 多数元素 / 颜色分类 / 寻找重复数

作者头像
_小羊_
发布于 2025-06-12 02:00:42
发布于 2025-06-12 02:00:42
11000
举报
文章被收录于专栏:C++C++
运行总次数:0

只出现一次的数字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int res = 0;
        for (auto e : nums) res ^= e;
        return res;
    }
};

多数元素

常规哈希表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        unordered_map<int, int> hashmap;
        int n = nums.size() / 2;
        int target = 0;
        for (auto e : nums)
        {
            if (++hashmap[e] > n)
            {
                target = e;
                break;
            }
        }
        return target;
    }
};

投票法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int target = 0, cnt = 0;
        for (auto e : nums)
        {
            if (e == target) cnt++;
            else if (--cnt < 0)
            {
                target = e;
                cnt = 1;
            }
        }
        return target;
    }
};

颜色分类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int l = -1, r = nums.size(), i = 0;
        while (i < r)
        {
            if (nums[i] == 0) swap(nums[++l], nums[i++]);
            else if (nums[i] == 1) i++;
            else swap(nums[--r], nums[i]);
        }
    }
};

下一个排列

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    void nextPermutation(vector<int>& nums) {
        int i = nums.size() - 2;
        while (i >= 0 && nums[i] >= nums[i + 1]) i--;
        if (i >= 0)
        {
            int j = nums.size() - 1;
            while (j >= 0 && nums[i] >= nums[j]) j--;
            swap(nums[i], nums[j]);
        }
        reverse(nums.begin() + i + 1, nums.end());
    }
};

寻找重复数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int findDuplicate(vector<int>& nums) {
        int fast = 0, slow = 0;
        do
        {
            slow = nums[slow];
            fast = nums[nums[fast]];
        } while (fast != slow);
        slow = 0;
        while (fast != slow)
        {
            slow = nums[slow];
            fast = nums[fast];
        }
        return slow;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
每日三题-下一个排列、颜色分类、寻找重复数
👨‍💻个人主页: 才疏学浅的木子 🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️ 📒 本文来自专栏: 算法 🌈 算法类型:Hot100题 🌈 ❤️ 支持我:👍点赞 🌹收藏 🤟关注 每日三题 下一个排列 颜色分类 寻找重复数 下一个排列 解法一 双向遍历 先找出最大的索引 k 满足 nums[k] < nums[k+1],如果不存在,就翻转整个数组; 再找出另一个最大索引 l 满足 nums[l] > nums[k]; 交换 nums[l] 和 nums[k]; 最后
才疏学浅的木子
2022/11/20
2160
每日三题-下一个排列、颜色分类、寻找重复数
LeetCode分类刷题:双指针(Two Pointers)
双指针(Two Pointers)一直是程序员面试中的一个必须准备的主题, 面试中双指针出现的次数比较多,主要由于在工作中指针经常用到,指针问题能够直接反应面试者的基础知识、代码能力和思维逻辑,因此双指针的问题必须掌握。
ACM算法日常
2019/03/06
2.2K0
【LeetCode 热题 100】哈希、双指针、滑动窗口
LeetCode 热题 100 中大多数题我都在算法专栏中写过解题思路,本篇的存在是为了记录一下刷这些明星题的过程(不记录一下总感觉白刷了🤡),因此题解不是很多(虽然你清楚的知道真正原因是什么),望见谅。
_小羊_
2025/04/22
2240
【LeetCode 热题 100】哈希、双指针、滑动窗口
LeetCode 287. 寻找重复数(BitMap)
给定一个包含 n + 1 个整数的数组 nums,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
Michael阿明
2021/02/20
5740
LeetCode 287. 寻找重复数(BitMap)
每日算法系列【LeetCode 287】寻找重复数
给定一个包含 个整数的数组 ,其数字都在 到 之间(包括 和 ),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
godweiyang
2020/03/24
7510
每日算法系列【LeetCode 287】寻找重复数
【LeetCode热题100】【技巧】寻找重复数
n+1个数的范围在[1,n],如果以值为下标作为链表指针,没有重复的数也能成环,有重复的数就是这个环有一个数可以由多个地方到达,也就是环有一个入口,这个入口就是重复的数
叶茂林
2024/04/08
1760
LintCode 633. 寻找重复的数(这个题要复习)
给出一个数组 nums 包含 n + 1 个整数,每个整数是从 1 到 n (包括边界),保证至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。
Michael阿明
2020/07/13
3090
LeetCode 高频 50 题:最优解笔记(附题解)
题目描述: 给定整数数组 nums 和目标值 target,在数组中找出和为目标值的两个整数,返回它们的索引。 示例: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 最优解思路: 使用哈希表存储元素值到索引的映射。遍历数组,对于每个元素 num,检查 target - num 是否在哈希表中。若存在则返回结果,否则将当前元素加入哈希表。 时间复杂度:O(n) 空间复杂度:O(n)
大熊计算机
2025/07/15
7020
【LeetCode 热题 100】滑动窗口最大值 / 最小覆盖子串 / 轮转数组 / 缺失的第一个正数
_小羊_
2025/04/26
1440
【LeetCode 热题 100】滑动窗口最大值 / 最小覆盖子串 / 轮转数组 / 缺失的第一个正数
单调栈-LeetCode 739、287(单调栈,桶计数)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。 例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。
算法工程师之路
2019/11/14
6800
【快排算法】颜色分类 / 排序数组 / 数组中的第K个最大元素 / LCR 库存管理 III
快速选择算法是用于在无序数组中寻找第 k 小(或第 k 大)元素的高效算法 ,是快速排序算法的一个变种。
_小羊_
2025/04/09
1230
【快排算法】颜色分类 / 排序数组 / 数组中的第K个最大元素 / LCR 库存管理 III
【算法刷题指南】双指针
判断三角形方法:a+b>c&&a+c>b&&b+c>a 但是这种判断方法需要判断三次 更加优化的方法:三个数是排好序的,a<b<c,只需要判断a+b>c成立与否
南桥
2024/10/24
1400
【LeetCode热题100】【技巧】颜色分类
叶茂林
2024/04/08
1030
算法:数组
•https://tianchi.aliyun.com/course/932/14631
用户3578099
2022/03/15
3510
算法:数组
Leetcode 31 Next Permutation
Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers. If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order). The replacement
triplebee
2018/01/12
5680
LeetCode精选好题(五)
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
看、未来
2020/08/25
4530
LeetCode精选好题(五)
【代码随想录】二刷-双指针法
双指针 27. 移除元素 // 时间复杂度 O(n) // 空间复杂度 O(1) class Solution { public: int removeElement(vector<int>& nums, int val) { int slow = 0; int fast = 0; int n = nums.size(); while(fast < n){ if(nums[fast] != val){
半生瓜的blog
2023/05/13
2020
[LeetCode]Array主题系列{1,11,15,16,18,26,27,31,33,34题}
1.内容介绍 开一篇文章记录在leetcode中array主题下面的题目和自己的思考以及优化过程,具体内容层次按照{题目,分析,初解,初解结果,优化解,优化解结果,反思}的格式来记录,供日后复习和反思。题目的顺序按照leetcode给出的题目顺序,有些题目在并不是按照题目本身序号顺序排列的,也不是严格按照难易程度来排列的。 因此,这篇文章并不具有很强的归类总结性,归类总结性知识将会在其他文章记录,本篇重点在记录解题过程中的思路,希望能对自己有所启发。 2.题目和解题过程 2.1 Container With
昊楠Hacking
2018/03/30
9960
leetcode刷题记录
该方法简单但是时间复杂度为O(n^2)。空间复杂度为O(1)。运行速度慢且内存空间消耗大。
Andromeda
2023/10/21
3270
【算法/学习】双指针
双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。如果两个指针方向相反,则称为「对撞指针」。如果两个指针方向相同,则称为「快慢指针」。如果两个指针分别属于不同的数组 / 链表,则称为「分离双指针」。
IsLand1314
2024/10/15
2840
【算法/学习】双指针
相关推荐
每日三题-下一个排列、颜色分类、寻找重复数
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档