硬算 没有负数情况 感觉题比较垃圾
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]);
}
};
昨天的
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;
}
};
排序以后相邻元素组队
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;
}
};.
昨天最后一题
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;
}
};
首先用快选,选出中位数 时间: 空间:
其次把数分为三类
- 第一类:大于mid 2
- 第二类:等于mid 1
- 第三类:小于mid 0
排序成 00000 111111 222222 时间: 空间:
然后让 第一类数 '2' 放到奇数位置
其他两类填到剩余位置
-
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++; } } };
- 分别将孩子的贪心指数和饼干尺寸都从小到大排序。
- 定义 和 从 0 开始,代表尝试将第 块饼干分配给第 个孩子。若 ,则答案加 1, 和 都向后移动;否则 向后移动。
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;
}
};
这几天实习没时间写,下面的等实习结束补