LintCode 31. 数组划分

原题

第一步,万年不变的查错。如果给的array是null或空,直接return 0

    public int partitionArray(int[] nums, int k) {
        if(nums == null || nums.length == 0) {
            return 0;
        }
        ...
    }

这道题很简单,简直对不起medium难度。分明就是quickSort的第一步嘛。总的来说,就是左右两个pointer,左边如果碰到大于等于k的,右边如果碰到小于k的,那么就左右互换。最后return那个,可能需要想一下,要求nums[index]必须大于等于k。这个while loop的结束条件就是左边超过右边,所以其实左边比右边大,所以最后要return left;
直接上完整的code了,没有难度。

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

分析

时间复杂度

只遍历了一次,所以O(n)。

空间复杂度

O(1)。

总的来说,太简单了。更简单的一种方法其实是一次遍历,数比k小的数字有几个,然后返回。如果真的面试碰到的话,应该不要傻傻的直接two pointer。应该先说最明显也是最简单的答案,然后等人家followup。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,868评论 0 33
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,453评论 0 3
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,475评论 18 399
  • 单身只是一个现象,我至今单身,并不是因为情商低,不是不敢再爱,不是怕受伤,也不是还忘不了谁,没什么狗血特别的原因,...
    Suthy阅读 244评论 0 0
  • 原文地址这是一个系列文章,查看更多请移步目录页 Code coverage 是一个计算你的单元测试覆盖率的工具。高...
    Nathan_Bao阅读 3,814评论 0 13

友情链接更多精彩内容