调整数组顺序使奇数位于偶数前面(Python and C++解法)
题目:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
思路:
使用双指针,类似于二分查找法的操作。
Python解法:
1 class Solution: 2 def exchange(self, nums: List[int]) -> List[int]: 3 if len(nums) == 0 or len(nums) == 1: 4 return nums 5 left, right = 0, len(nums)-1 # 定义左右指针 6 while left < right: 7 while left < right and (nums[left] & 1) != 0: # 循环直到左指针指向偶数 8 left += 1 9 while left < right and (nums[right] & 1) == 0: # 循环直到右指针指向奇数 10 right -= 1 11 12 nums[left], nums[right] = nums[right], nums[left] 13 return nums
C++解法:
1 class Solution { 2 public: 3 vector<int> exchange(vector<int>& nums) { 4 int left = 0, right = nums.size() - 1; 5 while (left < right) { 6 while (left < right && (nums[left] & 1) != 0) 7 left++; 8 while (left < right && (nums[right] & 1) == 0) 9 right--; 10 11 int temp; 12 temp = nums[left]; 13 nums[left] = nums[right]; 14 nums[right] = temp; 15 } 16 return nums; // 注意返回方式!!! 17 } 18 };