Easy-29

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 incrementing n - 1 elements by 1.

Example:

Input:
[1,2,3]

Output:
3

Explanation:
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时出现负数的情况)。


FAILED: MyTestHttp : && /usr/bin/c++ -g CMakeFiles/MyTestHttp.dir/main.cpp.o -o MyTestHttp && : /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::Http()': /home/hy-20/project/MyTestHttp/main.cpp:20: undefined reference to `curl_global_init' /usr/bin/ld: /home/hy-20/project/MyTestHttp/main.cpp:21: undefined reference to `curl_easy_init' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::~Http()': /home/hy-20/project/MyTestHttp/main.cpp:25: undefined reference to `curl_easy_cleanup' /usr/bin/ld: /home/hy-20/project/MyTestHttp/main.cpp:26: undefined reference to `curl_global_cleanup' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::setUrl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/hy-20/project/MyTestHttp/main.cpp:29: undefined reference to `curl_easy_setopt' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::setPostFields(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/hy-20/project/MyTestHttp/main.cpp:31: undefined reference to `curl_easy_setopt' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::setMethod(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/hy-20/project/MyTestHttp/main.cpp:35: undefined reference to `curl_easy_setopt' /usr/bin/ld: /home/hy-20/project/MyTestHttp/main.cpp:36: undefined reference to `curl_easy_setopt' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::setHeaders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)': /home/hy-20/project/MyTestHttp/main.cpp:41: undefined reference to `curl_slist_append' /usr/bin/ld: /home/hy-20/project/MyTestHttp/main.cpp:42: undefined reference to `curl_easy_setopt' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::setWriteFunction(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> const&)': /home/hy-20/project/MyTestHttp/main.cpp:46: undefined reference to `curl_easy_setopt' /usr/bin/ld: /home/hy-20/project/MyTestHttp/main.cpp:47: undefined reference to `curl_easy_setopt' /usr/bin/ld: CMakeFiles/MyTestHttp.dir/main.cpp.o: in function `Http::perform()': /home/hy-20/project/MyTestHttp/main.cpp:50: undefined reference to `curl_easy_perform' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed.
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值