剑指offer(第一天刷题)——JZ81 调整数组顺序使奇数位于偶数前面

剑指offer(第一天刷题)——JZ81 调整数组顺序使奇数位于偶数前面,第1张

剑指offer(第一天刷题)——JZ81 调整数组顺序使奇数位于偶数前面
  • 法一:复制,将奇数复制到下标(0-奇数数量),偶数复制到下标(奇数数量-总长度)
  • 法二:双指针,类比快速排序,左侧找到left,右侧找到right,交换值j

牛客网题目链接

法一:复制,将奇数复制到下标(0-奇数数量),偶数复制到下标(奇数数量-总长度) 法二:双指针,类比快速排序,左侧找到left,右侧找到right,交换值j
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型一维数组 
     * @return int整型一维数组
     */
    public int[] reOrderArrayTwo (int[] array) {
        // write code here
//         // 法一:复制
//         // write code here
//         int n = array.length;
//         int []result = new int[n];
//         int count = 0; //统计奇数个数
//         for(int i = 0; i < n; i++){ //遍历统计
//             if(array[i] % 2 == 1)
//                 count++;
//         }
//         int x = 0, y = count; //x与y分别表示答案中奇偶数的坐标
//         for(int i = 0; i < n; i++){
//             if(array[i] % 2 == 1){ //奇数在前
//                 result[x] = array[i];
//                 x++;
//             }else{ //偶数在后
//                 result[y] = array[i];
//                 y++;
//             }
//         }
//         return result;
        // 法二:双指针
        int left=0,right=array.length-1;
        while(left<right){
            while(left<right && array[left]%2==1){
                left++;
            }
            while(left<right && array[right]%2==0){
                right--;
            }
            if(left<right)
            {
                int temp = array[left];
                array[left] = array[right];
                array[right] = temp; 
            }  
        }
        return array;
        
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/722032.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-26
下一篇 2022-04-26

发表评论

登录后才能评论

评论列表(0条)

保存