【C++初阶】新手值得一做vector的oj题

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前学习C++和算法
✈️专栏:C++航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关注✨


一、只出现一次的数字

题目链接:点击跳转

在这里插入图片描述

思路:

  1. 相同的两个数异或^结果为00 ^ 任何数 = 任何数

  2. 将所有数据进行异或,最后剩下的就是只出现一次的数。

class Solution {
public:
    int singleNumber(vector<int>& nums) 
    {
        int  val = 0;
        for (auto x : nums)
        {
            val ^= x;
        }
        return val;
    }
};

二、删除有序数组中的重复项

题目链接:点击跳转

在这里插入图片描述

class Solution {
public:
	// 思路:相邻两个元素之间比较即可
    int removeDuplicates(vector<int>& nums) 
    {
        vector<int>::iterator it = nums.begin() + 1;
        while (it != nums.end())
        {
            if (*(it - 1) == *it)
            {
            	// 删除后it会自动指向删除元素的下一个元素
            	// 因此不需要++
                it = nums.erase(it);
            }
            else
            {
                ++it;
            }
        }
        return nums.size();
    }
};

三、只出现一次的数字 III

题目链接

在这里插入图片描述

  • 法一:哈希表
class Solution {
public:
    // 法一:哈希表
    vector<int> singleNumber(vector<int>& nums) 
    {
        unordered_map<int, int> heap;
        for (auto e : nums)
        {
            heap[e]++;
        }
        vector<int> ans;
        for (auto e : nums)
        {
            if (heap[e] == 1)
            {
                ans.push_back(e);
            }
        }
        return ans;
    }
};
  • 法二:位运算^

详细请看这篇文章:点击跳转

四、数组中出现次数超过一半的数字

题目链接:点击跳转

在这里插入图片描述

#include <climits>
class Solution {
public:
    // 思路:哈希表
    int MoreThanHalfNum_Solution(vector<int>& numbers) 
    {
        unordered_map<int, int> heap;
        for (auto e : numbers)
        {
            heap[e]++;
        }

        for (auto e : numbers)
        {
            if (heap[e] > numbers.size() / 2)
            {
                return e;
            }
        }
        return {};
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值