10.9 LeetCode 3289 0001 3295

在这里插入图片描述
在这里插入图片描述
思路:
1、用数组下标来表示是否出现过,初始为 0,出现则加 1,判断大于等于 2 的数字即为多次出现。
2、先将数组排序,依次遍历排序过的数组,若第 i 位与第 i+1 位相等,则说明是重复数字。

class Solution {
public:
    vector<int> getSneakyNumbers(vector<int>& nums) {
        int help[100];    //默认为零
        vector<int> res;  //动态数组

        for(int i=0; i<nums.size(); i++){
            help[nums[i]] = help[nums[i]] + 1;
            if(help[nums[i]] >= 2){
                res.push_back(nums[i]);
            }
        }
        return res;

    }
};

执行时间更短的解法:

class Solution {
public:
    vector<int> getSneakyNumbers(vector<int>& nums) {
        sort(nums.begin(), nums.end());

        vector<int> more;
        for(int i=0; i<nums.size()-1; i++){
            if(nums[i] == nums[i+1]){
                more.push_back(nums[i]);
            }
        }
        return more;
    }
};

在这里插入图片描述
注:
(1)定义数组:int a[10] 常量长度

(2)定义动态数组vector<int> m; 默认是空。加入数据m.push_back(数据)

(3)排序:sort(a.begin(), a.end());,默认从小到大。

在这里插入图片描述
在这里插入图片描述
思路如下:
将数组写入 map 中
计算出目标数与遍历到数的差值,判断该数是否在 map 中
同时应该保证两个数是不同的,添加 && 判断

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int, int> m;

        //把数组中的数写入map中
        for(int i=0; i<nums.size(); i++){
            m[nums[i]] = i;
        }

        for(int i=0; i<nums.size(); i++){
            int x = target - nums[i];
            if(m[x] && m[x]!=i ){
                //x在数组中,并且另一个数不是它本身
                return{i, m[x]};
            }
        }
        return {};
    }
};

注:
(1)map 字典
一种映射关系,可以是 map<int, int> m, 也可以是 map<char, int> m

        //把数组中的数写入map中
        for(int i=0; i<nums.size(); i++){
            m[nums[i]] = i;
        }

在这里插入图片描述
在这里插入图片描述
解题思路:

class Solution {
public:
    bool reportSpam(vector<string>& message, vector<string>& bannedWords) {

        //定义一个map,表示bannedwords,默认是0
        map<string, bool> m; 

        for(auto word1 : bannedWords){
            m[word1] = true;
        }

        int count = 0;
        for(auto word2 : message){
            if(m[word2]) count++;
            if(count >= 2) return true;
        }
        return false;
    }
};

注:
(1)map 表示一种映射 map<string, bool> m;

(2)循环遍历所有项for(auto word1 : bannedWords)

        for(auto word1 : bannedWords){
            m[word1] = true;
        }

遍历 bannedWords 的每个元素,并将每个单词作为键插入到一个映射

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值