【C++】LeetCode 力扣周赛279 第一题 题解
题目链接
2164. 对奇偶下标分别排序 - 力扣(LeetCode) (leetcode-cn.com)
题目要求
给你一个下标从0开始的整数数组nums
。根据下述规则重排nums
中的值:
按非递增顺序排列nums
奇数下标 上的所有值。 举个例子,如果排序前nums = [4,1,2,3]
,对奇数下标的值排序后变为[4,3,2,1]
。奇数下标1
和3
的值按照非递增顺序重排。 按 非递减 顺序排列nums
偶数下标 上的所有值。 举个例子,如果排序前nums = [4,1,2,3]
,对偶数下标的值排序后变为[2,1,4,3]
。偶数下标0
和2
的值按照非递减顺序重排。 返回重排nums
的值之后形成的数组。
思路
首先新开两个数组nums1
和nums2
,分别用来存放原数组奇数下标及偶数下标的元素,再开一个数组res
作为答案输出。
然后分别对两个数组使用sort函数排序,要求nums1
按照非递增顺序排列,那么直接使用reverse函数反转一下即可。
最后将两个数组依次合并到答案数组res
中即可。
详细代码
class Solution
{
public:
vector<int> sortEvenOdd(vector<int> &nums)
{
vector<int> nums1;
vector<int> nums2;
vector<int> res(nums.size());
for (int i = 0; i < nums.size(); i++)
{
if (i % 2 == 1)
nums1.push_back(nums[i]);
else
nums2.push_back(nums[i]);
}
sort(nums1.begin(), nums1.end());
sort(nums2.begin(), nums2.end());
reverse(nums1.begin(), nums1.end());
int m = 0, n = 0;
for (int i = 0; i < nums.size(); i++)
{
if (i % 2 == 1)
res[i] = nums1[m++];
else
res[i] = nums2[n++];
}
return res;
}
};