天池 線上程式設計 最小振幅(排序)

Michael阿明發表於2020-12-19

文章目錄

1. 題目

https://tianchi.aliyun.com/oj/231188302809557697/235445278655844966

給定一個由N個整陣列成的陣列A,一次移動,我們可以選擇此陣列中的任何元素並將其替換為任何值
陣列的振幅是陣列A中的最大值和最小值之間的差。
返回通過執行最多三次替換之後陣列A的最小振幅

N是一個整數而且範圍是: [2, 10000]
A陣列中的每一個元素都是整數而且範圍是: [-50, 50]

示例
示例 1
輸入:
A = [-9, 8, -1]
輸出: 0
解釋:可以將 -98 替換成-1,這樣所有元素都等於 -1,所以振幅是0

示例 2:
輸入:
A = [14, 10, 5, 1, 0]
輸出: 1
解釋:為了實現振幅是1,我們可以將 14105 替換成 1 或者 0

示例 3:
輸入:
A = [11, 0, -6, -1, -3, 5]
輸出: 3
解釋:可以將11-65都換成-2

2. 解題

  • 排序後,列舉兩端刪除元素個數 (0,3),(1,2),(2,1),(3,0)
class Solution {
public:
    /**
     * @param A: a list of integer
     * @return: Return the smallest amplitude
     */
    int MinimumAmplitude(vector<int> &A) {
        // write your code here
        int n = A.size();
        if(n <= 4) return 0;
        sort(A.begin(), A.end());
        return min(A[n-4]-A[0], 
                    min(A[n-3]-A[1],
                        min(A[n-2]-A[2],A[n-1]-A[3])));
    }
};

我的CSDN部落格地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
Michael阿明

相關文章