題目
1. 重新排列數組
2. 數組中的k個最強值
思路與算法
- 第一題不需要太多思路,最簡單的就是list,list將要求的順序的數依次收入,再將其按照順序重新放回nums。或者,直接用順序上的規律來寫即可。
- 第二題的話,也沒思路問題,排序,獲取中位數,然後進行判斷即可,注意只要前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;
}
}
複雜度分析
- 第一題時間複雜度爲O(N)
- 第二題時間複雜度爲O(N)+O(NlogN) = O(NlogN)