且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

LeetcCode——剑指Offer21【调整数组使其奇数位于偶数前面】

更新时间:2021-09-28 02:21:01

目录

题目

解题思路

代码详解


题目

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

题目概述:

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

示例:

LeetcCode——剑指Offer21【调整数组使其奇数位于偶数前面】

基础框架

class Solution{
    public int[] exchange(int[] nums){
    }
}

解题思路

利用双指针求解

代码详解

class Solution{
    public int[] exchange(int[] nums){
        int left=0,right=nums.length-1;
        while(left<right){        //当左右指针相遇时表示完成
            if(nums[left]%2!=0){
                left++;           //当左指针为奇数时,左指针向右边移动
            }else{
                swap(nums,left,right--);//将偶数放在右指针,右指针同时向左移动一位
            }
        }
        return nums;
    }
    public void swap(int[] nums,int left,int right){
        int temp=nums[left];
        nums[left]=nums[right];
        nums[right]=temp;
    }
}

LeetcCode——剑指Offer21【调整数组使其奇数位于偶数前面】

暴力解法

//左右指针
class Solution{
    public int[] exchange(int[] nums){
        int[] arr =new int[nums.length];
        int left=0;
        int right=nums.length-1;
        for(int i=0;i<nums.length;i++){
            if(nums[i]%2==0){
                arr[right--]=nums[i];
            }else {
                arr[left++]=nums[i];
            }
        }
        return arr;
    }
}
 
//暴力破解,第一次for循环,放奇数,第二次for循环放偶数
class Solution {
    public int[] exchange(int[] nums) {
        int[] arr = new int[nums.length];
        int ans = 0;
        for(int i = 0;i < arr.length;i++){
            if(nums[i] % 2 != 0){
                arr[ans++] = nums[i];
            }
        }
        for(int i = 0;i < arr.length;i++){
            if(nums[i] % 2 == 0){
                arr[ans++] = nums[i];
            }
        }
        return arr;
    }
}