其他分享
首页 > 其他分享> > 九日集训(每日打卡)第六天

九日集训(每日打卡)第六天

作者:互联网

1.1913. 两个数对之间的最大乘积差

硬算  没有负数情况  感觉题比较垃圾 

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

        int n = nums.size() - 1;

        return (nums[n] * nums[n-1] - nums[0] * nums[1]);
    }
};

2.976. 三角形的最大周长

 昨天的

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

        return 0;
    }
};

 3.561. 数组拆分 I

 排序以后相邻元素组队

class Solution {
public:
    int arrayPairSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int ans = 0;
        for(int i = 0;i<nums.size() - 1;i++)
            if(i % 2 == 0) ans += nums[i];
        return ans;
    }
};.

 4.881. 救生艇

昨天最后一题 

class Solution {
public:
    int numRescueBoats(vector<int>& people, int limit) {
        sort(people.begin(),people.end());

        int ans = 0;
        int i = 0,j = people.size() - 1;

        while(i <= j){
            if(people[j] + people[i] <= limit) i++;
            j--;
            ans++;
        }

        return ans;
    }
};

 5.324. 摆动排序 II

首先用快选,选出中位数                                 时间:O(N)  空间:O(logN)

 其次把数分为三类 

  • 第一类:大于mid    2
  • 第二类:等于mid    1
  • 第三类:小于mid    0

排序成    00000 111111 222222                       时间:O(N) 空间:O(1)

然后让     第一类数 '2' 放到奇数位置               A(i) = (2i + 1) % (n | 1)

                其他两类填到剩余位置

  1. class Solution {
    public:
        void wiggleSort(vector<int>& nums) {
            int n = nums.size();
            auto midptr = nums.begin() + n / 2;
            nth_element(nums.begin(),midptr,nums.end());
            int mid = * midptr;
    
            #define A(i) nums[(i * 2 + 1) % (n | 1)]
    
            for(int i = 0,j = 0,k = n - 1;i <= k;){
                if(A(i) > mid) swap(A(i++),A(j++));
                else if(A(i) < mid) swap(A(i),A(k--));
                else i++;
            }
    
        } 
    };

 6.455. 分发饼干

  1.  分别将孩子的贪心指数和饼干尺寸都从小到大排序。
  2. 定义 ij 从 0 开始,代表尝试将第 j 块饼干分配给第 i 个孩子。若 sj>=gi,则答案加 1,ij 都向后移动;否则 j 向后移动。
class Solution {
public:
    int findContentChildren(vector<int>& g, vector<int>& s) {
        sort(g.begin(), g.end());
        sort(s.begin(), s.end());
        int ans = 0;

        for (int i = 0, j = 0; i < g.size() && j < s.size(); j++)
            if (s[j] >= g[i]) {
                ans++;
                i++;
            }

        return ans;
    }
};

 这几天实习没时间写,下面的等实习结束补

 7.1827. 最少操作使数组递增

 

 


 8.945. 使数组唯一的最小增量

 

 


 9.611. 有效三角形的个数

 

 


 

标签:begin,end,nums,int,九日,第六天,vector,打卡,class
来源: https://blog.csdn.net/qq_55898670/article/details/121947560