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;
        }
    }
    
  • 相关阅读:
    Docker简介安装与下载
    ActiveMq安装以及简单的测试
    HashMap源码解析<一>put()方法
    SQL语句查询练习题
    珍藏的数据库SQL基础练习题答案
    MySQL习题及答案
    Hadoop学习1
    数据库简单的实际应用
    数据库基础练习选择题
    数据库练习题
  • 原文地址:https://www.cnblogs.com/xyz-1024/p/14044041.html
Copyright © 2011-2022 走看看