题目:
Given an array
A
of non-negative integers, half of the integers inA
are odd, and half of the integers are even.
Sort the array so that wheneverA[i]
is odd,i
is odd; and whenever
A[i]
is even,i
is even.
You may return any answer array that satisfies this condition.
Example 1:Input: [4,2,5,7] Output: [4,5,2,7] Explanation: [4,7,2,5], [2,5,4,7],[2,7,4,5] would also have been accepted.
Note:
2 <= A.length <= 20000 A.length % 2 == 0
0 <= A[i] <= 1000
解释:
让奇数位置是奇数,让偶数位置是偶数。
看到这道题第一反应的python解法:
class Solution:
def sortArrayByParityII(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
even=[a for a in A if a%2==0]
odd=[a for a in A if a%2]
result=[]
for i in range(len(A)//2):
result.append(even[i])
result.append(odd[i])
return result
更常规的解法是用两个指针,会更快,也不需要用额外的数组存奇数和偶数,降低了空间复杂度。
class Solution:
def sortArrayByParityII(self, A):
"""
:type A: List[int]
:rtype: List[int]
"""
evenp,oddp=0,1
result=[0]*len(A)
for num in A:
if num%2:
result[oddp]=num
oddp+=2
else:
result[evenp]=num
evenp+=2
return result
c++代码:
class Solution {
public:
vector<int> sortArrayByParityII(vector<int>& A) {
int evenp=0,oddp=1;
vector<int> result(A.size(),0);
for(auto num:A)
{
if (num%2)
{
result[oddp]=num;
oddp+=2;
}
else
{
result[evenp]=num;
evenp+=2;
}
}
return result;
}
};
总结:
很简单的题目。