今日题目(剑指Offer系列)
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序, 使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
示例: 输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
解题思路:
>本题的要求是将奇数放在偶数的前面 >所以我们可以定义双指针 >用low指针前向扫描,high后向扫描 >如果发现low指向的值为偶数,且high指向的值为奇数 >那么就将二者进行交换 >如果low指向的是奇数,将low+1指向下一元素 >如果high指向的偶数,将high-1指向前一个元素 >知道low>high循环结束
Python解法:
class Solution: def exchange(self, nums: List[int]) -> List[int]: low=0 high=len(nums)-1 while low<high: if (nums[low]&1)==1: low+=1 elif (nums[high]&1)==0: high-=1 else : nums[low],nums[high]=nums[high],nums[low] return nums
Java解法:
class Solution { public int[] exchange(int[] nums) { int low = 0; int high = nums.length - 1; while (low < high) { if ((nums[low] & 1) == 0 && (nums[high] & 1) == 1) { int temp = nums[low]; nums[low] = nums[high]; nums[high] = temp; low++; high--; } if ((nums[low] & 1) == 1) { low++; } if ((nums[high] & 1) == 0) { high--; } } return nums; } }