题目描述
给定一个非负整数数组 A
,A
中一半整数是奇数,一半整数是偶数。
对数组进行排序,以便当 A[i]
为奇数时,i
也是奇数;当 A[i]
为偶数时, i
也是偶数。
你可以返回任何满足上述条件的数组作为答案。
示列:
输入:[4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
解题思路
设俩个指针,第一个指针从数组第一个元素开始向后依次移动。如果当前元素不符合排序规则,则设第二个指针。第二个指针从第一个指针的下个元素开始依次向后移动,第二个指针每到达一个元素都查看该元素是否满足排序规则,如果不满足排序规则且与第一个指针所指元素正好奇偶性相反则交换俩个元素,第一个指针继续后移。如果不满足第二个指针继续后移,如此循环。
代码展示
func sortArrayByParityII(A []int) []int{
for key,value:=range A{
if (key%2==0&&value%2!=0)||(key%2!=0&&value%2==0){//判断当前元素是否满足排序规则
keys:=key+1
for keyson,valueson:=range A[keys:]{//循环判断下一个元素是否满足排序规则
keyson=keyson+keys
if (keyson%2==0&&valueson%2!=0)||(keyson%2!=0&&valueson%2==0){//如果不满足
if value%2!=valueson%2 {//查看当前元素和将要交换元素的奇偶性
A[key],A[keyson]=valueson,value //交换俩个元素
break
}
}
}
}
}
return A
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-array-by-parity-ii