题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
思路
- 先将数组遍历一次,然后记录奇数的个数(因为奇数在前,偶数在后)
- 将数组拷贝出一份副本,然后遍历拷贝的副本
- 若是奇数原数组从第一个位置开始覆盖数据,否则从奇数个数的位置开始覆盖数据
Java代码实现
public void reOrderArray(int [] array) { int oddCount = 0; int evenCount = 0; int[] array2 = array.clone(); for (int i = 0; i < array.length; i++) { if(array[i]%2 == 1){ oddCount++; } } for (int i = 0; i < array2.length; i++) { if(array2[i]%2 == 1){ array[evenCount++] = array2[i]; }else{ array[oddCount++] = array2[i]; } } }
Golang代码实现
func reOrderArray(nums []int){ nums2 := make([]int,len(nums)) copy(nums2,nums) oddCount := 0 evenCount := 0 for i:=0; i< len(nums); i++ { if nums[i]%2 == 1{ oddCount++; } } for i:=0; i<len(nums2);i++{ if nums2[i]%2 == 0{ nums[oddCount] = nums2[i] oddCount++ }else { nums[evenCount] = nums2[i] evenCount++ } } }