20200612:力扣192週週賽上

題目

1. 重新排列數組
在這裏插入圖片描述
2. 數組中的k個最強值
在這裏插入圖片描述

思路與算法

  1. 第一題不需要太多思路,最簡單的就是list,list將要求的順序的數依次收入,再將其按照順序重新放回nums。或者,直接用順序上的規律來寫即可。
  2. 第二題的話,也沒思路問題,排序,獲取中位數,然後進行判斷即可,注意只要前k個符合要求的數,其他的注意寫的時候的一些細節即可。

代碼實現

1. 重新排列數組

class Solution {
    public int[] shuffle(int[] nums, int n) {
        int[] res = new int[2*n];
        for (int i = 0; i < n; i++) {
            res[2*i] = nums[i];
        }
        for (int j = 0; j < n; j++) {
            res[2*j+1] = nums[j+n];
        }
        return res;
    }
}
class Solution {
    public int[] shuffle(int[] nums, int n) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(nums[i]);
            list.add(nums[i+n]);
        }
        for (int j = 0; j < 2*n; j++) {
            nums[j] = list.get(j);
        }
        return nums;
    }
}

2. 數組中的k個最強值

class Solution {
    public int[] getStrongest(int[] arr, int k) {
        Arrays.sort(arr);
        
        int len = arr.length;
        int left = 0;
        int right = len - 1;
        int mid = arr[(len-1)/2];
        int[] res = new int[k];
        int count = 0;
        while (count < k) {
            if (Math.abs(arr[right] - mid) >= Math.abs(arr[left] - mid)) {
                res[count++] = arr[right];
                right--;
            } else {
                res[count++] = arr[left];
                left++;
            }
        }
        return res;
    }
}

複雜度分析

  1. 第一題時間複雜度爲O(N)
  2. 第二題時間複雜度爲O(N)+O(NlogN) = O(NlogN)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章