1.先排序,然后返回两种可能的最大值即可。
class Solution {
public:
int maximumProduct(vector<int>& nums) {
int n=nums.size();
sort(nums.begin(),nums.end());
int a=nums[0]*nums[1]*nums[n-1];
int b=nums[n-1]*nums[n-2]*nums[n-3];
return max(a,b);
}
};
2。构建pair类型的数组,first为nums[i],second为i,对first排序,相当于将nums排序,排序后i等价于小于自己的数目,通过i遍历,将i赋给cnt,cnt表示小于自己的数量,之后将cnt赋给存最终结果的数组。
class Solution {
public:
vector<int> smallerNumbersThanCurrent(vector<int>& nums) {
int n=nums.size();
vector<pair<int,int>>group;
for(int i=0;i<n;i++){
group.emplace_back(nums[i],i);
}
sort(group.begin(),group.end());
vector<int>rets(n,0);
int cnt=-1;
for(int i=0;i<n;i++){
if(cnt==-1||group[i].first!=group[i-1].first){
cnt=i;
}
rets[group[i].second]=cnt;
}
return rets;
}
};
3.先排序,再贪心。
class Solution {
public:
int minIncrementForUnique(vector<int>& nums) {
sort(nums.begin(),nums.end());
int cnt=0;
int n=nums.size();
for(int i=1;i<n;i++){
if(nums[i]<=nums[i-1]){
cnt+=nums[i-1]+1-nums[i];
nums[i]=nums[i-1]+1;
}
}
return cnt;
}
};