mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-06 23:28:29 +08:00
Merge pull request #2819 from markwang1992/922-sortArrayByParityII
992.按奇偶排序数组II更新题目描述,增加Go方法二和方法三
This commit is contained in:
@ -11,9 +11,9 @@
|
|||||||
|
|
||||||
[力扣题目链接](https://leetcode.cn/problems/sort-array-by-parity-ii/)
|
[力扣题目链接](https://leetcode.cn/problems/sort-array-by-parity-ii/)
|
||||||
|
|
||||||
给定一个非负整数数组 A, A 中一半整数是奇数,一半整数是偶数。
|
给定一个非负整数数组 nums, nums 中一半整数是奇数,一半整数是偶数。
|
||||||
|
|
||||||
对数组进行排序,以便当 A[i] 为奇数时,i 也是奇数;当 A[i] 为偶数时, i 也是偶数。
|
对数组进行排序,以便当 nums[i] 为奇数时,i 也是奇数;当 nums[i] 为偶数时, i 也是偶数。
|
||||||
|
|
||||||
你可以返回任何满足上述条件的数组作为答案。
|
你可以返回任何满足上述条件的数组作为答案。
|
||||||
|
|
||||||
@ -35,17 +35,17 @@
|
|||||||
```CPP
|
```CPP
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
vector<int> sortArrayByParityII(vector<int>& A) {
|
vector<int> sortArrayByParityII(vector<int>& nums) {
|
||||||
vector<int> even(A.size() / 2); // 初始化就确定数组大小,节省开销
|
vector<int> even(nums.size() / 2); // 初始化就确定数组大小,节省开销
|
||||||
vector<int> odd(A.size() / 2);
|
vector<int> odd(nums.size() / 2);
|
||||||
vector<int> result(A.size());
|
vector<int> result(nums.size());
|
||||||
int evenIndex = 0;
|
int evenIndex = 0;
|
||||||
int oddIndex = 0;
|
int oddIndex = 0;
|
||||||
int resultIndex = 0;
|
int resultIndex = 0;
|
||||||
// 把A数组放进偶数数组,和奇数数组
|
// 把nums数组放进偶数数组,和奇数数组
|
||||||
for (int i = 0; i < A.size(); i++) {
|
for (int i = 0; i < nums.size(); i++) {
|
||||||
if (A[i] % 2 == 0) even[evenIndex++] = A[i];
|
if (nums[i] % 2 == 0) even[evenIndex++] = nums[i];
|
||||||
else odd[oddIndex++] = A[i];
|
else odd[oddIndex++] = nums[i];
|
||||||
}
|
}
|
||||||
// 把偶数数组,奇数数组分别放进result数组中
|
// 把偶数数组,奇数数组分别放进result数组中
|
||||||
for (int i = 0; i < evenIndex; i++) {
|
for (int i = 0; i < evenIndex; i++) {
|
||||||
@ -62,22 +62,22 @@ public:
|
|||||||
|
|
||||||
### 方法二
|
### 方法二
|
||||||
|
|
||||||
以上代码我是建了两个辅助数组,而且A数组还相当于遍历了两次,用辅助数组的好处就是思路清晰,优化一下就是不用这两个辅助树,代码如下:
|
以上代码我是建了两个辅助数组,而且nums数组还相当于遍历了两次,用辅助数组的好处就是思路清晰,优化一下就是不用这两个辅助数组,代码如下:
|
||||||
|
|
||||||
```CPP
|
```CPP
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
vector<int> sortArrayByParityII(vector<int>& A) {
|
vector<int> sortArrayByParityII(vector<int>& nums) {
|
||||||
vector<int> result(A.size());
|
vector<int> result(nums.size());
|
||||||
int evenIndex = 0; // 偶数下标
|
int evenIndex = 0; // 偶数下标
|
||||||
int oddIndex = 1; // 奇数下标
|
int oddIndex = 1; // 奇数下标
|
||||||
for (int i = 0; i < A.size(); i++) {
|
for (int i = 0; i < nums.size(); i++) {
|
||||||
if (A[i] % 2 == 0) {
|
if (nums[i] % 2 == 0) {
|
||||||
result[evenIndex] = A[i];
|
result[evenIndex] = nums[i];
|
||||||
evenIndex += 2;
|
evenIndex += 2;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
result[oddIndex] = A[i];
|
result[oddIndex] = nums[i];
|
||||||
oddIndex += 2;
|
oddIndex += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -96,15 +96,15 @@ public:
|
|||||||
```CPP
|
```CPP
|
||||||
class Solution {
|
class Solution {
|
||||||
public:
|
public:
|
||||||
vector<int> sortArrayByParityII(vector<int>& A) {
|
vector<int> sortArrayByParityII(vector<int>& nums) {
|
||||||
int oddIndex = 1;
|
int oddIndex = 1;
|
||||||
for (int i = 0; i < A.size(); i += 2) {
|
for (int i = 0; i < nums.size(); i += 2) {
|
||||||
if (A[i] % 2 == 1) { // 在偶数位遇到了奇数
|
if (nums[i] % 2 == 1) { // 在偶数位遇到了奇数
|
||||||
while(A[oddIndex] % 2 != 0) oddIndex += 2; // 在奇数位找一个偶数
|
while(nums[oddIndex] % 2 != 0) oddIndex += 2; // 在奇数位找一个偶数
|
||||||
swap(A[i], A[oddIndex]); // 替换
|
swap(nums[i], nums[oddIndex]); // 替换
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return A;
|
return nums;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
@ -253,6 +253,37 @@ func sortArrayByParityII(nums []int) []int {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 方法二
|
||||||
|
func sortArrayByParityII(nums []int) []int {
|
||||||
|
result := make([]int, len(nums))
|
||||||
|
evenIndex := 0 // 偶数下标
|
||||||
|
oddIndex := 1 // 奇数下标
|
||||||
|
for _, v := range nums {
|
||||||
|
if v % 2 == 0 {
|
||||||
|
result[evenIndex] = v
|
||||||
|
evenIndex += 2
|
||||||
|
} else {
|
||||||
|
result[oddIndex] = v
|
||||||
|
oddIndex += 2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// 方法三
|
||||||
|
func sortArrayByParityII(nums []int) []int {
|
||||||
|
oddIndex := 1
|
||||||
|
for i := 0; i < len(nums); i += 2 {
|
||||||
|
if nums[i] % 2 == 1 { // 在偶数位遇到了奇数
|
||||||
|
for nums[oddIndex] % 2 != 0 {
|
||||||
|
oddIndex += 2 // 在奇数位找一个偶数
|
||||||
|
}
|
||||||
|
nums[i], nums[oddIndex] = nums[oddIndex], nums[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nums
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### JavaScript
|
### JavaScript
|
||||||
|
Reference in New Issue
Block a user