题目一:
链接:最大乘积
解题思路:
排序+贪心
C++:
class Solution {
public:
int maxProductDifference(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()-1]*nums[nums.size()-2]-(nums[0]*nums[1]);
}
};
题目二:
链接:数组拆分
解题思路:
贪心算法,最大的匹配次大的,最后结果是最大。
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(),nums.end());
int su=nums[0];
for(int i=1;i<nums.size();i++){
if(i%2==0){
su+=nums[i];
}
}
return su;
}
};
第三题:
链接:摆动排序
解题思路:
排序+贪心
C++:
class Solution {
public:
void wiggleSort(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<int> l=nums;
int mid=nums.size()%2?nums.size()/2:(nums.size()/2-1);
int s=nums.size()-1;
for(int i=0;i<nums.size();i++){
if(i%2==0){
nums[i]=l[mid--];
}else{
nums[i]=l[s--];
}
}
}
};
第四题:
链接:分发饼干
解题思路:
排序+贪心
class Solution {
public:
int findContentChildren(vector<int>& g, vector<int>& s) {
sort(g.begin(),g.end());
sort(s.begin(),s.end());
int i,j;
for(i=0,j=0;i<s.size()&&j<g.size();i++){
if(s[i]>=g[j]){
j++;
}
}
return j;
}
};
题目五:
链接:数组递增
解题思路:
C++:
class Solution {
public:
int minOperations(vector<int>& nums) {
int su=0;
for(int i=1;i<nums.size();i++){
if(nums[i]-nums[i-1]<=0){
su+=nums[i-1]-nums[i]+1;
nums[i]=nums[i-1]+1;
}
}
return su;
}
};
题目六:
链接:最小增量
解题思路:
排序+贪心
C++:
class Solution {
public:
int minIncrementForUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
int s=0;
for(int i=1;i<nums.size();i++){
if(nums[i]-nums[i-1]<=0){
s+=nums[i-1]-nums[i]+1;
nums[i]+=nums[i-1]-nums[i]+1;
}
}
return s;
}
};
题目七:
链接:有效三角形个数
解题思路:
class Solution {
public:
int triangleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
int s=0;
for(int i = 0; i < nums.size(); ++i) {
int j = i + 1;
int k = j + 1;
while(j < nums.size()) {
while(k < nums.size()) {
if(nums[i] + nums[j] <= nums[k]) {
break;
}
++k;
}
s += k-j-1;
++j;
if(k == j) k++;
}
}
return s;
}
};