题目描述:
解法一(暴力法):
class Solution {
public:
int minMoves(vector<int>& nums) {
int res=0;
int mmax=0,mmin=0;
while(1){
for(int i=0;i<nums.size();i++){
if(nums[i]>nums[mmax])
mmax=i;
if(nums[i]<nums[mmin])
mmin=i;
}
if(nums[mmin]==nums[mmax])
break;
for(int i=0;i<nums.size();i++){
if(i!=mmax)
nums[i]++;
}
res++;
}
return res;
}
};
解法二(改进暴力法):
class Solution {
public:
int minMoves(vector<int>& nums) {
int res = 0;
int mmax = 0, mmin = 0;
while (1) {
for (int i = 0; i<nums.size(); i++) {
if (nums[i]>nums[mmax])
mmax = i;
if (nums[i]<nums[mmin])
mmin = i;
}
if (nums[mmin] == nums[mmax])
break;
int dis = nums[mmax] - nums[mmin];
for (int i = 0; i<nums.size(); i++) {
if (i != mmax)
nums[i] += dis;
}
res += dis;
}
return res;
}
};
解法三:
class Solution {
public:
int minMoves(vector<int>& nums) {
int res=0;
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++){
res+=nums[i]-nums[0];
}
return res;
}
};
class Solution {
public:
int minMoves(vector<int>& nums) {
int res=0,min=0;
for(int i=1;i<nums.size();i++){
if(nums[i]<nums[min])
min=i;
}
for(int i=0;i<nums.size();i++){
res+=nums[i]-nums[min];
}
return res;
}
};
解法四(动态规划):
class Solution {
public:
int minMoves(vector<int>& nums) {
int moves=0;
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++){
int diff=nums[i]+moves-nums[i-1];
nums[i]+=moves;
moves+=diff;
}
return moves;
}
};
class Solution {
public:
int minMoves(vector<int>& nums) {
int moves=0;
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size();i++){
nums[i]+=moves;
int diff=nums[i]-nums[i-1];
moves+=diff;
}
return moves;
}
};