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

基于快速排序的数组划分 · Partition Array

时间:2017-12-19 19:49:38      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:pos   防止   ret   ati   space   follow   des   参考   www   

2组:

[抄题]:

给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:

  • 所有小于k的元素移到左边
  • 所有大于等于k的元素移到右边

返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k

[思维问题]:

想不到两个小人的partition

[一句话思路]:

两个小人的partition,不用排序

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. 直接调换就行了,不用写swap函数
  2. 要判断left < right,防止left加过头了
  3. corner case别忘了

[总结]:

  1. 一直到left = right时都要一直处理,所以判断条件是left <= right

[复杂度]:

Time complexity: 平均情况下,O(nlgn)每个数都放在一半中, Space complexity: O(lgn)放在一半中

[英文数据结构,为什么不用别的数据结构]:

降低复杂度

[其他解法]:

排序

[Follow Up]:

[题目变变变]:

 

技术分享图片
/**
* 本参考程序来自九章算法,由 @九章算法 提供。版权所有,转发请注明出处。
* - 九章算法致力于帮助更多中国人找到好的工作,教师团队均来自硅谷和国内的一线大公司在职工程师。
* - 现有的面试培训课程包括:九章算法班,系统设计班,算法强化班,Java入门与基础算法班,Android 项目实战班,
* - Big Data 项目实战班,算法面试高频题班, 动态规划专题班
* - 更多详情请见官方网站:http://www.jiuzhang.com/?source=code
*/ 

public class Solution {
    /** 
     *@param nums: The integer array you should partition
     *@param k: As description
     *return: The index after partition
     */
    public int partitionArray(int[] nums, int k) {
        if(nums == null || nums.length == 0){
            return 0;
        }
        
        int left = 0, right = nums.length - 1;
        while (left <= right) {

            while (left <= right && nums[left] < k) {
                left++;
            }

            while (left <= right && nums[right] >= k) {
                right--;
            }

            if (left <= right) {
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;
                
                left++;
                right--;
            }
        }
        return left;
    }
}
View Code

 

3组:

[抄题]:

[思维问题]:

[一句话思路]:

[输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

[画图]:

[一刷]:

  1. nums[left] = k 时,不用自加。会导致后面直接越出边界条件。

[总结]:

[复杂度]:Time complexity: O() Space complexity: O()

[英文数据结构,为什么不用别的数据结构]:

[其他解法]:

[Follow Up]:

[题目变变变]:

 
 

基于快速排序的数组划分 · Partition Array

标签:pos   防止   ret   ati   space   follow   des   参考   www   

原文地址:http://www.cnblogs.com/immiao0319/p/8066024.html

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