调整数组顺序使奇数位于偶数前面(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 };
posted @ 2020-07-02 17:55  孔子?孟子?小柱子!  阅读(169)  评论(0编辑  收藏  举报