0
点赞
收藏
分享

微信扫一扫

刷题第五天

自由情感小屋 2022-04-07 阅读 78
c++leetcode

1、排序数组

 vector<int> sortArray(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        return nums;
    }

 2、多数元素

int majorityElement(vector<int>& nums) {
        unordered_map<int,int> cnt;
        int n=nums.size();
        for(int i=0;i<nums.size();i++){
            cnt[nums[i]]++;
             if(cnt[nums[i]]>n/2){
                 return nums[i];
             }
        }
       return -1;
    }

 排完序以后,如果多数元素存在,则一定在数组的中间位置

int majorityElement(vector<int>& nums) {
        int n=nums.size();
       sort(nums.begin(),nums.end());
       return nums[n/2];
    }

3、存在重复元素 

bool containsDuplicate(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        for(int i=1;i<nums.size();i++){
            if(nums[i]==nums[i-1]){
                return true;
            }
        }
        return false;
    }

4、最大间距

int maximumGap(vector<int>& nums) {
        int n=nums.size();
        int max=0;
        sort(nums.begin(),nums.end());
        for(int i=1;i<n;i++){
            if(nums[i]-nums[i-1]>max){
                max=nums[i]-nums[i-1];
            }
        }
        return max;
    }

5、按奇偶排序数组

  vector<int> sortArrayByParity(vector<int>& A) {
        // 头
        int i = 0;
        // 尾
        int j = A.size() - 1;
        while (i < j)
        {
            // 发现奇数在i而偶数在j的情况,则交换
            if (A[i] % 2 > A[j] % 2)
            {
                swap(A[i], A[j]);
            }
            // 按照数的情况来移动两侧指针
            if (A[i] % 2 == 0)
            {
                ++i;
            }
            if (A[j] % 2 == 1)
            {
                --j;
            }
        }

        return A;
    }

6、最小时间差

 int getTime(string &ti){
        return (int(ti[0]-'0')*10+int(ti[1]-'0'))*60+int(ti[3]-'0')*10+int(ti[4]-'0');
    }
    int findMinDifference(vector<string>& timePoints) {
        int n=timePoints.size();
        vector<int> ret(n);
        int ans=1440;
        for(int i=0;i<n;i++){
            ret[i]=getTime(timePoints[i]);
        }
        sort(ret.begin(),ret.end());
        for(int i=1;i<n;i++){
            ans=min(ans,ret[i]-ret[i-1]);
        }
        ans=min(ans,ret[0]-ret[n-1]+1440);
        return ans;
    }

7、三角形的最大周长

 int largestPerimeter(vector<int>& nums) {
        int n=nums.size();
        sort(nums.begin(),nums.end());
        for(int i=n-1;i>=2;i--){
            if(nums[i]<nums[i-1]+nums[i-2]){
                return nums[i]+nums[i-1]+nums[i-2];
            }
        }
        return 0;
    }

8、救生艇

举报

相关推荐

0 条评论