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


    题目

    补充问题:数组只含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;
    	}
    }
    
    
  • 相关阅读:
    爬虫大作业
    作业
    新练习
    爬虫新练习
    最新操作
    小练习
    Hadoop综合大作业
    理解Mapreduce
    熟悉常用的HBase操作
    第三章 熟悉常用的HDFS操作
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10915416.html
Copyright © 2020-2023  润新知