- 两个数对之间的最大乘积差
int maxProductDifference(vector& nums)
{
//------- 没有负数,直接排序
int n = nums.size();
sort(nums.begin(), nums.end());
int a = nums[0], b = nums[1];
int c = nums[n-2], d = nums[n-1];
return c * d - a * b;
}
- 三角形的最大周长
int largestPerimeter(vector& A) {
sort(A.begin(), A.end());
for (int i = (int)A.size() - 1; i >= 2; --i) {
if (A[i - 2] + A[i - 1] > A[i]) {
return A[i - 2] + A[i - 1] + A[i];
}
}
return 0;
}
- 数组拆分 I
public int arrayPairSum(int[] nums) {
int n = nums.length;
Arrays.sort(nums);
int ans = 0;
for (int i = 0; i < n; i += 2) ans += nums[i];
return ans;
}
- 救生艇
int numRescueBoats(vector &people, int limit) {
int ans = 0;
sort(people.begin(), people.end());
int light = 0, heavy = people.size() - 1;
while (light <= heavy) {
if (people[light] + people[heavy] > limit) {
--heavy;
} else {
++light;
--heavy;
}
++ans;
}
return ans;
}
- 摆动排序 II
void wiggleSort(vector& nums) {
int length=nums.size();
int bucket[5001]={0};
for(int num:nums) bucket[num]++;
int big,small;
if(length&1){
big=length-2;
small=length-1;
}
else{
big=length-1;
small=length-2;
}
int j=5000;
//插入大数
for(int i=1;i<=big;i+=2){
while(bucket[j]==0) j--;
nums[i]=j;
bucket[j]--;
}
//插入小数
for(int i=0;i<=small;i+=2){
while(bucket[j]==0) j--;
nums[i]=j;
bucket[j]--;
}
}