栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

题目

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

示例

输入: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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

方法1:暴力遍历 Java实现
class Solution {
    public int[] exchange(int[] nums) {
        List ji = new ArrayList<>();
        List ou = new ArrayList<>();
        
        for (int i = 0; i < nums.length; i++){
            if (nums[i] % 2 == 0) ou.add(nums[i]);
            else ji.add(nums[i]);
        }

        ji.addAll(ou);

        int[] res = new int[ji.size()];

        for (int i = 0; i < ji.size(); i++) res[i] = ji.get(i);
        return res;
    }
}

方法2:双指针

和快速排序的思想有点像:

1、左指针指向处理好的末端
2、右指针指向没有处理好的

Java实现
class Solution {
    public int[] exchange(int[] nums) {
        int n = nums.length;
        int[] res = new int[n];

        int l = 0, r = n - 1;

        while (l < r){
            while (l < r && nums[l] % 2 != 0) l++;
            while (l < r && nums[r] % 2 == 0) r--;

            int tmp = nums[l];
            nums[l] = nums[r];
            nums[r] = tmp;
        }
        return nums;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462911.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号