leetcode刷题心得记录

1.unordered_set 无序集合

在leetcode575 分糖果中可以使用,加快解题速度
在这里插入图片描述

class Solution {
public:
    int distributeCandies(vector<int>& candyType) {
        //哈希数组
        unordered_set<int> sums;
        for(auto i:candyType)
        {
            sums.insert(i);
        }

        return min(sums.size(),candyType.size()/2);
        

    }
};

2.sort排序

sort(envelopes.begin(),envelopes.end(),[](const auto& a,const auto& b)
        {
            return a[0]<b[0] || (a[0]==b[0] &&a[1]>b[1]);
        });//此时按照a升序,b降序来进行排序

3.单调栈

stack<int> s;//单调栈保存数组下标
            int n=nums.size();
            vector<int> ans(n,-1);
            for(int i=0;i<2*n-1;i++)
            {
               while(!s.empty() && nums[i%n]>nums[s.top()])
                {
                    ans[s.top()]=nums[i%n];
                    s.pop();
                }
                s.push(i%n);
            }
            return ans;

4.判断回文子串

 f.assign(n,vector<int>(n,true));
        for(int i=n-1;i>=0;i--){
            for(int j=i+1;j<n;j++)
            {
                f[i][j] = (s[i]==s[j]) && (f[i+1][j-1]);
            }
        }//for循环来判断是否是回文子串

5.用bitset来判断32位数中的1的个数

class Solution {
public:
    int hammingWeight(uint32_t n) {
        bitset<32> b(n);
        int ans=0;
        for(int i=0;i<32;i++)
        {
            if(b[i])
                ans++;
        }
        return ans;
        
    }
};

6.用upper_bound以及binary_search来实现二分查找

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {

        auto row = upper_bound (matrix.begin(),matrix.end(),target , [] (const int b,const vector<int> & a)
        {
           return  b<a[0];
        }
        );

        if(row == matrix.begin())
            return false;
        
        row--;

        return binary_search(row->begin(),row->end(),target);

    }
};
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页