1111
1212[ 力扣题目链接] ( https://leetcode.cn/problems/sort-array-by-parity-ii/ )
1313
14- 给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
14+ 给定一个非负整数数组 nums, nums 中一半整数是奇数,一半整数是偶数。
1515
16- 对数组进行排序,以便当 A [ i] 为奇数时,i 也是奇数;当 A [ i] 为偶数时, i 也是偶数。
16+ 对数组进行排序,以便当 nums [ i] 为奇数时,i 也是奇数;当 nums [ i] 为偶数时, i 也是偶数。
1717
1818你可以返回任何满足上述条件的数组作为答案。
1919
3535``` CPP
3636class Solution {
3737public:
38- vector<int > sortArrayByParityII(vector<int >& A ) {
39- vector<int > even(A .size() / 2); // 初始化就确定数组大小,节省开销
40- vector<int > odd(A .size() / 2);
41- vector<int > result(A .size());
38+ vector<int > sortArrayByParityII(vector<int >& nums ) {
39+ vector<int > even(nums .size() / 2); // 初始化就确定数组大小,节省开销
40+ vector<int > odd(nums .size() / 2);
41+ vector<int > result(nums .size());
4242 int evenIndex = 0;
4343 int oddIndex = 0;
4444 int resultIndex = 0;
45- // 把A数组放进偶数数组 ,和奇数数组
46- for (int i = 0; i < A .size(); i++) {
47- if (A [ i] % 2 == 0) even[ evenIndex++] = A [ i] ;
48- else odd[ oddIndex++] = A [ i] ;
45+ // 把nums数组放进偶数数组 ,和奇数数组
46+ for (int i = 0; i < nums .size(); i++) {
47+ if (nums [ i] % 2 == 0) even[ evenIndex++] = nums [ i] ;
48+ else odd[ oddIndex++] = nums [ i] ;
4949 }
5050 // 把偶数数组,奇数数组分别放进result数组中
5151 for (int i = 0; i < evenIndex; i++) {
@@ -62,22 +62,22 @@ public:
6262
6363### 方法二
6464
65- 以上代码我是建了两个辅助数组,而且A数组还相当于遍历了两次 ,用辅助数组的好处就是思路清晰,优化一下就是不用这两个辅助树 ,代码如下:
65+ 以上代码我是建了两个辅助数组,而且nums数组还相当于遍历了两次 ,用辅助数组的好处就是思路清晰,优化一下就是不用这两个辅助数组 ,代码如下:
6666
6767```CPP
6868class Solution {
6969public:
70- vector<int> sortArrayByParityII(vector<int>& A ) {
71- vector<int> result(A .size());
70+ vector<int> sortArrayByParityII(vector<int>& nums ) {
71+ vector<int> result(nums .size());
7272 int evenIndex = 0; // 偶数下标
7373 int oddIndex = 1; // 奇数下标
74- for (int i = 0; i < A .size(); i++) {
75- if (A [i] % 2 == 0) {
76- result[evenIndex] = A [i];
74+ for (int i = 0; i < nums .size(); i++) {
75+ if (nums [i] % 2 == 0) {
76+ result[evenIndex] = nums [i];
7777 evenIndex += 2;
7878 }
7979 else {
80- result[oddIndex] = A [i];
80+ result[oddIndex] = nums [i];
8181 oddIndex += 2;
8282 }
8383 }
@@ -96,15 +96,15 @@ public:
9696``` CPP
9797class Solution {
9898public:
99- vector<int > sortArrayByParityII(vector<int >& A ) {
99+ vector<int > sortArrayByParityII(vector<int >& nums ) {
100100 int oddIndex = 1;
101- for (int i = 0; i < A .size(); i += 2) {
102- if (A [ i] % 2 == 1) { // 在偶数位遇到了奇数
103- while(A [ oddIndex] % 2 != 0) oddIndex += 2; // 在奇数位找一个偶数
104- swap(A [ i] , A [ oddIndex] ); // 替换
101+ for (int i = 0; i < nums .size(); i += 2) {
102+ if (nums [ i] % 2 == 1) { // 在偶数位遇到了奇数
103+ while(nums [ oddIndex] % 2 != 0) oddIndex += 2; // 在奇数位找一个偶数
104+ swap(nums [ i] , nums [ oddIndex] ); // 替换
105105 }
106106 }
107- return A ;
107+ return nums ;
108108 }
109109};
110110```
@@ -253,6 +253,37 @@ func sortArrayByParityII(nums []int) []int {
253253 }
254254 return result;
255255}
256+
257+ // 方法二
258+ func sortArrayByParityII (nums []int ) []int {
259+ result := make ([]int , len (nums))
260+ evenIndex := 0 // 偶数下标
261+ oddIndex := 1 // 奇数下标
262+ for _ , v := range nums {
263+ if v % 2 == 0 {
264+ result[evenIndex] = v
265+ evenIndex += 2
266+ } else {
267+ result[oddIndex] = v
268+ oddIndex += 2
269+ }
270+ }
271+ return result
272+ }
273+
274+ // 方法三
275+ func sortArrayByParityII (nums []int ) []int {
276+ oddIndex := 1
277+ for i := 0 ; i < len (nums); i += 2 {
278+ if nums[i] % 2 == 1 { // 在偶数位遇到了奇数
279+ for nums[oddIndex] % 2 != 0 {
280+ oddIndex += 2 // 在奇数位找一个偶数
281+ }
282+ nums[i], nums[oddIndex] = nums[oddIndex], nums[i]
283+ }
284+ }
285+ return nums
286+ }
256287```
257288
258289### JavaScript
0 commit comments