// 6000. 对奇偶下标分别排序
class Solution {
public int[] sortEvenOdd(int[] nums) {
// nums的长度是否为偶数
// (nums.length & 0x01) == 1 : 长度为奇数
boolean isOdd = (nums.length & 0x01) == 1 ? true : false;
// 奇偶数组长度
int len = nums.length >> 1;
// 创建奇偶数组
// 如果nums长度为奇数,偶数数组长度需要多1
int[] evens = new int[isOdd ? (len + 1) : len];
int[] odds = new int[len];
// 将nums中的元素按照对应的下标的奇偶性填充到对应的数组中
// i : 当前nums的遍历位置
int i = 0, ind = 0;
while(i < len << 1){
// evens 和 odds每次遍历的下标是相同的
// 注意每次都要移动i的值
evens[ind] = nums[i++];
odds[ind++] = nums[i++];
}
// 如果nums的长度是奇数,需要将最后一个元素放置到偶数数组中
if(isOdd)
evens[ind] = nums[i];
// 对奇偶数组排序
Arrays.sort(evens);
Arrays.sort(odds);
// 重置下标位置
i = 0;
ind = 0;
// 将排序后的数组元素,填充到nums中
while(i < len << 1){
nums[i++] = evens[ind];
nums[i++] = odds[len - 1 - ind];
ind++;
}
// 如果是nums的长度是奇数,需要将偶数数组中最后一个元素放置到nums中
if(isOdd)
nums[i] = evens[ind];
return nums;
}
}
排序、规则[6000] 对奇偶下标分别排序
最新推荐文章于 2024-07-16 23:15:32 发布