奇偶排序(左边为奇数右边为偶数)

问题描述:

给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数;并且都要分别有序。

第一行输入整数n。(1<=n<=1000)表示数组大小 第二行输入n个整数a.(1<=n<=100)


例子

示例 1:

输入:
6
3 34 67 89 90 58
输出:3 67 89 34 90 58


提示:


代码实现:

1.双指针:

public static ArrayList<Integer> solution(int n, ArrayList<Integer> arr){
        ArrayList<Integer> result = new ArrayList<>();
        ArrayList<Integer> result2 = new ArrayList<>();
        int left=0;
        int right=0;
        int L=0;
        int R=n-1;
        while (L <= R) {// 双指针查找,左指针位偶就去 右指针找奇数,然后交换位置,最后左右指针相遇结束,就得到了左边位奇数,右边为偶数的数组,但是不是有序的的。
            if (arr.get(L) % 2 == 0) {
                left = arr.get(L);

                while (true) {
                    if (L > R) {
                        break;
                    }
                    if (arr.get(R) % 2 != 0) {
                        right = arr.get(R);
                        arr.set(L++, right);
                        arr.set(R--, left);

                        break;
                    } else {
                        R--;
                    }
                }
            } else {
                L++;
            }
        }
        //有序处理
        for(Integer item:arr){
            if(item%2==0){
                break;
            }
            result.add(item);
        }
        for(int i=n-1;;i--){
            if(arr.get(i)%2!=0){
                break;
            }
            result2.add(arr.get(i));
        }
        arr.clear();
        Collections.sort(result);
        Collections.sort(result2);
        arr.addAll(result);
        arr.addAll(result2);
        return arr;
    }

运行结果:

在这里插入图片描述


题目来源:CSDN
链接: CSDN题目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天将降大任于我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值