码迷,mamicode.com
首页 > 编程语言 > 详细

[程序员代码面试指南]数组和矩阵-数组的partition调整

时间:2019-05-24 00:42:31      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:时间   题目   程序员   结束   补充   变量   string   dma   维护   

题目

补充问题:数组只含0,1,2,对数组排序,要求时间复杂度O(n),额外空间复杂度O(1)

题解

  • 维护三个变量,l,idx,r。左区间[0,l],中间区间[l+1,idx],右区间[idx+1,r]。
  • 初始化l=-1,r=len,idx=0。idx用来遍历数组。
    • 当arr[idx]=1,idx++;
    • 当arr[idx]=0,swap(arr[l+1,idx]),i++,idx++
    • 当arr[idx]=2,swap(arr[idx,r-1]),r--,idx++
  • 当idx=r说明中区间和右区间连上了。排序结束。

todo

原问题待做。

代码

package ArrayAndMatrix;

public class Main {
    public static void main(String args[]) {
        int[] arr= {0,1,2,0,1,2};
        sort(arr);
        for(int elm:arr) {
            System.out.println(elm);
        }
    }
    
    public static void sort(int[] arr) {
        if(arr.length>1) {
            int l=-1;
            int r=arr.length;
            int idx=0;
            while(idx!=r) {
                if(arr[idx]==1) {
                    ++idx;
                }
                else if(arr[idx]==0) {
                    swap(arr,idx++,++l);
                }
                else {
                    swap(arr,idx,--r);
                }
            }
        }
    }
    
    public static void swap(int[] arr,int idx1,int idx2) {
        int temp=arr[idx1];
        arr[idx1]=arr[idx2];
        arr[idx2]=temp;
    }
}

[程序员代码面试指南]数组和矩阵-数组的partition调整

标签:时间   题目   程序员   结束   补充   变量   string   dma   维护   

原文地址:https://www.cnblogs.com/coding-gaga/p/10915416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!