Easy-29
来源:互联网 发布:抽奖软件可内定 编辑:程序博客网 时间:2024/05/22 08:28
leetcode 453. Minimum Moves to Equal Array Elements
Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementingn - 1 elements by 1.
Example:
Input:[1,2,3]Output:3Explanation:Only three moves are needed (remember each move increments two elements):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
RT:
int maxIndex(int* nums,int numsSize)
{
int max=0;
for(int i=1;i<numsSize;i++)
{
if(nums[i]>nums[max])
{
max=i;
}
}
return max;
}
bool isequal(int* nums,int numsSize)
{
int max=0;
for(int i=1;i<numsSize;i++)
{
if(nums[i]!=nums[max])
{
return false;
}
}
return true;
}
int minMoves(int* nums, int numsSize) {
int flag=1;
int result=0;
if(isequal(nums,numsSize))
{
flag=0;
}
while(flag)
{
int k=maxIndex(nums,numsSize);
for(int i=0;i<numsSize;i++)
{
if(i!=k)
{
nums[i]++;
}
}
result++;
if(isequal(nums,numsSize))
{
flag=0;
}
}
return result;
}
WA:
int maxIndex(int* nums,int numsSize)
{
int max=0;
for(int i=1;i<numsSize;i++)
{
if(nums[i]>nums[max])
{
max=i;
}
}
return max;
}
int minMoves(int* nums, int numsSize) {
if(numsSize==1)
return 0;
int Index=maxIndex(nums,numsSize);
int sum=0;
for(int i=0;i<numsSize;i++)
{
sum+=nums[i];
}
while(nums[Index]>0)
{
if((numsSize*nums[Index]-sum)%(numsSize-1)==0)
{
break;
}
else
{
nums[Index]++;
}
}
return (numsSize*nums[Index]-sum)/(numsSize-1);
}
tips: nums数组里的字[1,1,2147483647] 会出错。 (numsSize*nums[Index]-sum)/(numsSize-1) 对公式需要化简,因为数太大,超过int范围。
WA:
int maxIndex(int* nums,int numsSize)
{
int max=0;
for(int i=1;i<numsSize;i++)
{
if(nums[i]>nums[max])
{
max=i;
}
}
return max;
}
int minMoves(int* nums, int numsSize) {
if(numsSize==1)
return 0;
int Index=maxIndex(nums,numsSize);
int sum=0;
for(int i=0;i<numsSize;i++)
{
sum+=nums[i];
}
while(nums[Index]>0)
{
if((nums[Index]-sum)%(numsSize-1)==0)
{
break;
}
else
{
nums[Index]++;
}
}
return (nums[Index]-sum)/(numsSize-1)+nums[Index];
}
tips: 上式改进后,又WA,要哭了。。。。【-100,0,100】错了。。。
AC:
int maxIndex(int* nums,int numsSize)
{
int max=0;
for(int i=1;i<numsSize;i++)
{
if(nums[i]>nums[max])
{
max=i;
}
}
return max;
}
int min1(int* nums,int numsSize)
{
int min=nums[0];
for(int i=1;i<numsSize;i++)
{
if(min>nums[i])
{
min=nums[i];
}
}
return min;
}
int minMoves(int* nums, int numsSize) {
if(numsSize==1)
return 0;
int minVal=min1(nums,numsSize);
for(int i=0;i<numsSize;i++)
{
nums[i]-=minVal;
}
int Index=maxIndex(nums,numsSize);
int sum=0;
for(int i=0;i<numsSize;i++)
{
sum+=nums[i];
}
nums[Index]=sum;
while(nums[Index]>0)
{
if((nums[Index]-sum)%(numsSize-1)==0)
{
break;
}
else
{
nums[Index]++;
}
}
return (nums[Index]-sum)/(numsSize-1)+nums[Index];
}
tips::感天动地终于过了!!!加了一个格式化数组函数,将数组里的元素全部减去最小值,然后nums[Index]的范围不在是最大值到无穷,而是数组元素和到无穷(避免了最小元素减去sum时出现负数的情况)。
- Easy-29
- easy
- Easy
- Easy-题目29:26. Remove Duplicates from Sorted Array
- Easy Plugs
- easy problem
- So Easy!
- so easy
- easy explorer
- Easy Explore
- Easy Task
- Easy Task
- Easy CHM
- HDU2699+Easy
- HDU4648+Easy
- Easy billiards
- Easy STL
- easy connect
- Struts2配置RESULT中TYPE的参数说明
- HOG特征,LBP特征,Haar特征
- 简单好用的Android页面路由框架
- python3+PyQt5 实现支持多线程的页面索引器应用程序
- 浏览器嗅探器
- Easy-29
- Bootstrap之辅助类样式,响应式工具和小图标组件
- ActiveMQ的使用教程
- nginx实现集群服务器的负载均衡
- 一个字符串中查找第一个只出现一次的字符。 要求复杂度为O(N).
- 基于proteus的51单片机仿真实例四十六、C语言的枚举类型演示实例
- 杭电1728逃离迷宫解法二 BFS 搜索
- aoj-2249 Road Construction 单源最短路dijkstra+堆优化(模板)
- 面向对象的六大原则(推荐)