7.29 第一次做可以用自己的方法 AC 出来,但是 K 神的解法更好,明天再做一次!
7.30 一次 AC

题目描述


原题链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/

解题思路:双指针(类比快排的切分交换)


K 神题解:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/5v3rqr/

  • 左右俩指针分别位于左右两边,左指针遇到偶数就停止,右指针遇到奇数就停止,然后交换俩指针上的数据,直至 i >= j 即退出循环,返回 nums 即可!
    1. class Solution {
    2. public int[] exchange(int[] nums) {
    3. int i = 0, j = nums.length - 1;
    4. while(i < j) {
    5. while(i < j && (nums[j] & 1) != 1) j--;
    6. while(i < j && (nums[i] & 1) == 1) i++;
    7. if(i < j) {
    8. int tmp = nums[i];
    9. nums[i] = nums[j];
    10. nums[j] = tmp;
    11. }
    12. }
    13. return nums;
    14. }
    15. }