1. 程式人生 > 其它 >LeetCode34--去掉最低工資和最高工資後的工資平均值、判斷能否形成等差數列、重新排列字串

LeetCode34--去掉最低工資和最高工資後的工資平均值、判斷能否形成等差數列、重新排列字串

技術標籤:Leetcode刷題

1.去掉最低工資和最高工資後的工資平均值

//給你一個整數陣列 salary ,數組裡每個數都是 唯一 的,其中 salary[i] 是第 i 個員工的工資。 
//
// 請你返回去掉最低工資和最高工資以後,剩下員工工資的平均值。 
//
// 
//
// 示例 1: 
//
// 輸入:salary = [4000,3000,1000,2000]
//輸出:2500.00000
//解釋:最低工資和最高工資分別是 1000 和 4000 。
//去掉最低工資和最高工資以後的平均工資是 (2000+3000)/2= 2500
// 
//
// 示例 2: 
//
// 輸入:salary = [1000,2000,3000]
//輸出:2000.00000
//解釋:最低工資和最高工資分別是 1000 和 3000 。
//去掉最低工資和最高工資以後的平均工資是 (2000)/1= 2000
// 
//
// 示例 3: 
//
// 輸入:salary = [6000,5000,4000,3000,2000,1000]
//輸出:3500.00000
// 
//
// 示例 4: 
//
// 輸入:salary = [8000,9000,2000,3000,6000,1000]
//輸出:4750.00000
// 
//
// 
//
// 提示: 
//
// 
// 3 <= salary.length <= 100 
// 10^3 <= salary[i] <= 10^6 
// salary[i] 是唯一的。 
// 與真實值誤差在 10^-5 以內的結果都將視為正確答案。 
// 
// Related Topics 排序 陣列
public double average(int[] salary) {
        Arrays.sort(salary);
        double sum = 0;
        for (int i = 1; i < salary.length-1; i++) {
            sum += salary[i];
        }
        return sum/(salary.length-2);
    }

2.判斷能否形成等差數列

//給你一個數字陣列 arr 。 
//
// 如果一個數列中,任意相鄰兩項的差總等於同一個常數,那麼這個數列就稱為 等差數列 。 
//
// 如果可以重新排列陣列形成等差數列,請返回 true ;否則,返回 false 。 
//
// 
//
// 示例 1: 
//
// 輸入:arr = [3,5,1]
//輸出:true
//解釋:對陣列重新排序得到 [1,3,5] 或者 [5,3,1] ,任意相鄰兩項的差分別為 2 或 -2 ,可以形成等差數列。
// 
//
// 示例 2: 
//
// 輸入:arr = [1,2,4]
//輸出:false
//解釋:無法通過重新排序得到等差數列。
// 
//
// 
//
// 提示: 
//
// 
// 2 <= arr.length <= 1000 
// -10^6 <= arr[i] <= 10^6 
// 
// Related Topics 排序 陣列
public boolean canMakeArithmeticProgression(int[] arr) {
        Arrays.sort(arr);
        for (int i = 1; i < arr.length-1; i++) {
            if(arr[i]-arr[i-1] != arr[i+1] - arr[i]){
                return false;
            }
        }
        return true;
    }

3.重新排列字串

//給你一個字串 s 和一個 長度相同 的整數陣列 indices 。 
//
// 請你重新排列字串 s ,其中第 i 個字元需要移動到 indices[i] 指示的位置。 
//
// 返回重新排列後的字串。 
//
// 
//
// 示例 1: 
//
// 
//
// 輸入:s = "codeleet", indices = [4,5,6,7,0,2,1,3]
//輸出:"leetcode"
//解釋:如圖所示,"codeleet" 重新排列後變為 "leetcode" 。
// 
//
// 示例 2: 
//
// 輸入:s = "abc", indices = [0,1,2]
//輸出:"abc"
//解釋:重新排列後,每個字元都還留在原來的位置上。
// 
//
// 示例 3: 
//
// 輸入:s = "aiohn", indices = [3,1,4,2,0]
//輸出:"nihao"
// 
//
// 示例 4: 
//
// 輸入:s = "aaiougrt", indices = [4,0,2,6,7,3,1,5]
//輸出:"arigatou"
// 
//
// 示例 5: 
//
// 輸入:s = "art", indices = [1,0,2]
//輸出:"rat"
// 
//
// 
//
// 提示: 
//
// 
// s.length == indices.length == n 
// 1 <= n <= 100 
// s 僅包含小寫英文字母。 
// 0 <= indices[i] < n 
// indices 的所有的值都是唯一的(也就是說,indices 是整數 0 到 n - 1 形成的一組排列)。 
// 
// Related Topics 排序
public String restoreString(String s, int[] indices) {
        String s1 = "";
        Map<Integer, Character> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(indices[i], s.charAt(i));
        }
        for (Integer key:map.keySet()) {
            s1 += map.get(key);
        }
        return s1;
    }