zoukankan      html  css  js  c++  java
  • "Coding Interview Guide" -- 数组的partition调整

    题目

      给定一个有序数组arr,调整arr使得这个数组的左半部分没有重复元素且升序,而不用保证右部分是否有序

      例如,arr=[1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7, 7, 8, 8, 8, 9],调整之后arr=[1, 2, 3, 4, 5, 6, 7, 8 ,9, ...]

    要求

      时间复杂度为O(N),额外空间复杂度为O(1)

     1 public void leftUniqueSort(int[] arr)
     2 {
     3     if(arr == null || arr.length < 2)
     4     {
     5       return;
     6     }
     7 
     8     int left = 0;
     9     int cur = 1;
    10         
    11     while(cur != arr.length)
    12     {
    13       if(arr[cur] != arr[left])
    14       {
    15           swap(arr, ++left, cur);
    16       }
    17       cur++;
    18     }
    19 }

    题目

      给定一个数组arr,其中只可能含有0、1、2三个值,请实现arr的排序

    要求

      时间复杂度为O(N),额外空间复杂度为O(1)

     1 public void sort(int[] arr)
     2 {
     3     if(arr == null || arr.length < 2)
     4     {
     5       return;
     6     }
     7 
     8     int left = -1;
     9     int index = 0;
    10     int right = arr.length;
    11         
    12     while(index < right)
    13     {
    14       if(arr[index] == 0)
    15       {
    16           swap(arr, ++left, index++);
    17       }
    18       else if(arr[index] == 2)
    19       {
    20           swap(arr, index, --right);
    21       }
    22       else
    23       {
    24           index++;
    25       }
    26     }
    27 }

    题目

      有一个数组arr,给定一个值k,实现比k小的数都放在数组的左边,等于k的数都放在数组的中间,大于k的数都放在数组的右边

    要求

      时间复杂度为O(N),额外空间复杂度为O(1)

     1 public void sort(int[] arr, int k)
     2 {
     3     if(arr == null || arr.length < 2)
     4     {
     5       return;
     6     }
     7 
     8     int left = -1;
     9     int index = 0;
    10     int right = arr.length;
    11         
    12     while(index < right)
    13     {
    14       if(arr[index] < k)
    15       {
    16           swap(arr, ++left, index++);
    17       }
    18       else if(arr[index] > k)
    19       {
    20           swap(arr, index, --right);
    21       }
    22       else
    23       {
    24           index++;
    25       }
    26     }
    27 }
    1 public void swap(int[] arr, int i, int j)
    2 {
    3     int temp = arr[i];
    4     arr[i] = arr[j];
    5     arr[j] = temp;
    6 }

    来源:左程云老师《程序员代码面试指南》

  • 相关阅读:
    spring 包的依赖关系
    菜鸟程序猿之IDEA快捷键
    eclipse的svn插件
    SVN使用教程总结
    Oracle 11g安装步骤详谈
    C3P0连接池的配置与使用
    Java课程设计
    201621123057 《Java程序设计》第14周学习总结
    201621123057 《Java程序设计》第13周学习总结
    201621123057 《Java程序设计》第12周学习总结
  • 原文地址:https://www.cnblogs.com/OoycyoO/p/10943598.html
Copyright © 2011-2022 走看看