• 面试笔试算法题备考(一)--阿里巴巴--排序


    题目描述
    等级:中等
    知识点:排序、贪心
    给出一个长度为 n 的数组,和一个正整数 d。
    你每次可以选择其中任意一个元素 a[i] 将其变为 a[i] + d 或 a[i] - d,这算作一
    次操作。
    你需要将所有的元素全部变成相等元素,如果有解,请输出最小操作次数,如果
    无解请输出 -1。
    输入数字 n、数字 d,和一个长度为 n 的数组 a。1 <= n <= 100000,1 <= d
    <= 100, 1 <= a[i] <= 100000。
    输出一个数字,表示最小的操作次数,如果无解输出 -1。
    示例 1
    输入:
    5
    2
    [3,5,7,1,9]
    输出:
    6

    注意

    最优解为全部变为 5,共 1 + 0 + 1 + 2 + 2 = 6 次。
     
     
     
    C++代码
    #include <iostream>
    #include <stdio.h>
    #include <string>
    #include <cmath>
    //#define Max 100000;
    /*
    5
    2
    3 5 7 1 9
    */
    using namespace std;
    
    int Conversion(int a[], int n, int d);
    
    int main()
    {
        int Max = 100000;
        int n,d;
        int a[Max];
        cin >> n;
        cin >> d;
        for (int i = 0;i < n; i++)
        {
            cin >>a[i];
        }
    
        int answer = Conversion(a,n,d);
    
        cout << answer << endl;
        return 0;
    }
    int Conversion (int a[], int n, int d)
    {
        int Max = 100000;
        int b[Max] = {0};
        int c[Max] = {0};
        int h[Max] = {0};  //取倍数
        int temp = a[0]%d;
        c[0] = a[0]/d;
        h[0] = c[0];
        for (int i = 1;i<n;i++)
        {
            if (a[i]%d == temp)
            {
                c[i] = a[i]/d;
                h[i] = c[i];
            }
            else{
                return -1;
            }
        }
        int temptime = h[0];
    
        for (int i=0; i<n-1; i++ )
        {
            for(int j = 0; j < n-i-1; j++)
            {
                if (h[j] > h[j+1])
                {
                    int t = h[j];
                    h[j] = h[j+1];
                    h[j+1] = t;
    
                }
            }
        }
        int sum=0;
        temp = n/2;
        for (int i = 0; i<n ;i++){
            sum+=abs(h[i]-h[temp]);
        }
        return sum;
    }
    若有恒,何必三更起五更眠;最无益,莫过一日曝十日寒。
  • 相关阅读:
    响应式设计
    小视频-上传视频
    美多商城项目总结
    jwt 接口加密
    flask入门小方法
    flask的继承和包含
    flask中的宏
    flask的jinja2模板中过过滤器的相关小内容
    flask中的简单的前端写入
    flask的cookie和session的简单原理
  • 原文地址:https://www.cnblogs.com/sjbin/p/13308538.html
Copyright © 2020-2023  润新知