2021-04-22 刷题(数组)

学习目标:

leetcode 刷题

学习内容:

存在重复元素
link:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x248f5/
(1)暴力解法
(2)排序
(3)set函数&哈希表

只出现一次的数字
(1)暴力
(2)排序
(3)哈希表
(4)异或

link:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/x21ib6/

学习时间:

2022.4.22 上午

学习产出:

存在重复元素
给定一个整数数组,判断是否存在重复元素。

如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。

在这里插入图片描述

第一种思路:暴力破解

第二种思路:先排序再比较有无重复

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
    sort(nums.begin(), nums.end());                //对nums排序
        for (int i = 1; i < nums.size(); i++) {
            if (nums[i] == nums[i - 1]) {
                return true;
            }
        }
        return false;
    }
};

第三种思路:利用set函数去掉重复的元素和原来的长度作比较&&利用哈希表,如果插入一个函数后发现已经存在,就是已有的

class Solution {                                //官方答案
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> s;
        for (int x: nums) {
            if (s.find(x) != s.end()) {
                return true;
            }
            s.insert(x);
        }
        return false;
    }
};

只出现一次的数字
第一种思路:大力出奇迹
第二种排序:排序后比较前后

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        sort(nums.begin(),nums.end());                 //排序
        if(nums[0]!=nums[1]||nums.size()==1)
        return nums[0];
        for(int i=1;i<nums.size();++i)
        {
            if(nums[i-1]!=nums[i]&&nums[i]!=nums[i+1]) //前后不一致就是要找的
            return nums[i];
        }
        return 0;

    }
};

第三种思路:利用哈希表
第四种思路:位运算(异或)

class Solution {
public:
    int singleNumber(vector<int>& nums) {
        int ret = 0;
        for (auto e: nums) ret ^= e;
        return ret;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值