zoukankan      html  css  js  c++  java
  • 剑指offer_13:调整数组顺序使奇数位于偶数前面

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

    示例:
    输入:nums = [1,2,3,4]
    输出:[1,3,2,4]
    注:[3,1,2,4] 也是正确的答案之一。

    提示:
    1 <= nums.length <= 50000
    1 <= nums[i] <= 10000

    1、复制数组

    新建一个数组,两次遍历,第一次将奇数存入,第二次将偶数存入

    class Solution {
        public int[] exchange(int[] nums) {
            int len=nums.length;
            int[] res=new int[len];
            int index=0;
            for(int i=0;i<len;i++){
                if(nums[i]%2!=0){
                    res[index++]=nums[i];
                    nums[i]=0;
                }
            }
            for(int i=0;i<len;i++){
                if(nums[i]!=0){
                    res[index++]=nums[i];
                }
            }
            return res;
        }
    }
    

    2、双指针

    p1指针呆在原地,p2往前走直到遇到奇数,p1和p2的数组元素互换,p1往前走一个。

    class Solution {
        public int[] exchange(int[] nums) {
            int len=nums.length;
            int p1=0,p2=0;
            while(p2<len){
                if(nums[p2]%2!=0){
                    swap(nums,p1,p2);
                    p1++;
                }
                p2++;
            }
            return nums;
        }
        public void swap(int[] nums,int a,int b){
            int temp=nums[a];
            nums[a]=nums[b];
            nums[b]=temp;
        }
    }
    

    3、首尾双指针

    一点快排的思想,首指针遇到偶数停下,尾指针遇到奇数停下,然后两个指针所指元素互换

    判断奇偶数使用位运算

    class Solution {
        public int[] exchange(int[] nums) {
            int len=nums.length;
            int p1=0,p2=len-1;
            while(p1<p2){
                if((nums[p1]&1)!=0){
                    p1++;
                    continue;
                }
                if((nums[p2]&1)==0){
                    p2--;
                    continue;
                }
                swap(nums,p1,p2);
            }
            return nums;
        }
        public void swap(int[] nums,int a,int b){
            int temp=nums[a];
            nums[a]=nums[b];
            nums[b]=temp;
        }
    }
    
  • 相关阅读:
    Tensorflow 搭建自己的神经网络(二)
    Tensorflow 搭建自己的神经网络(一)
    JSON简介
    JS 弹出框计时器
    【扫盲】史上最全的互联网专业词语汇总,小白必备,人手一套!
    推荐几个数据分析网站
    转:一位阿里人对数据模型建设的几点思考与总结
    数据模型设计心得
    数据仓库架构设计
    数据仓库建模与ETL的实践技巧(转载)
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14044041.html
Copyright © 2011-2022 走看看