現有一個數組A,對於A中的每個元素A[i],都可以進行+K或者-K的操作(每個元素僅能選擇加或減一次)。 在這個操作后,我們將得到許多不同版本的數組B。 請找出所有可能的B數組中,數組中最大值與最小值里最小的差值。


/*輸入

每組測試數據的第一行為一個整數K(0<=K<=10000),第二行為數組A(1 <= A.length <= 10000,0 <= A[i] <= 10000)

 輸出

對每組測試數據,在單獨的一行里輸出最小的差值。

 樣例輸入

3

1 3 6

樣例輸出

3*/

#include "stdafx.h"

#include <iostream>

#include <vector>

#include <numeric>

#include <limits>

using namespace std; 

int smallestRange(int k, int *A, int len)

{

    int i = len;

    int add[10000], jian[10000];

    for (int j = 0; j<i; j++)

    {

        add[j] = A[j] + k;

        jian[j] = A[j] - k;

    }

    int min = 0;

    for (int j = 0; j<i - 1; j++)

    {

        for (int q = j + 1; q<i; q++)

        {

            int ta1 = add[j] - add[q];

            int ta2 = -1 * ta1;

            int tj1 = jian[j] - jian[q];

            int tj2 = -1 * tj1;

            if (ta1<ta2&&ta1<tj1&&ta1<tj2)

            {

                min = ta1;

            }

            else{

                if (ta2<ta1&&ta2<tj1&&ta2<tj2)

                {

                    min = ta2;

                }

                else{

                    if (tj1<ta1&&tj1<ta2&&tj1<tj2)

                    {

                        min = tj1;

                    }

                    else{

                        min = tj2;

                    }

                }

            }

        }

    }

    return min;

}

int _tmain(int argc, _TCHAR* argv[])

{

    int k;

    cout << "K" << endl;

    cin >> k;

    int A[10000];

    int in = 0, i = 0;

    cout << "A" << endl;

    while (in >= 0)

    {

        cin >> in;

        A[i] = in;

        i++;

    }

    int len = i-1;

   int res;

    res = smallestRange(k, A, len);

    cout << res << endl;

    return 0;

}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM