博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lintcode: Partition Array
阅读量:5205 次
发布时间:2019-06-14

本文共 2381 字,大约阅读时间需要 7 分钟。

Given an array "nums" of integers and an int "k", Partition the array (i.e move the elements in "nums") such that,    * All elements < k are moved to the left    * All elements >= k are moved to the rightReturn the partitioning Index, i.e the first index "i" nums[i] >= k.NoteYou should do really partition in array "nums" instead of just counting the numbers of integers smaller than k.If all elements in "nums" are smaller than k, then return "nums.length"ExampleIf nums=[3,2,2,1] and k=2, a valid answer is 1.ChallengeCan you partition the array in-place and in O(n)?

Quick Sort 一样的做法,只是有两种情况特殊处理:我第一次做的时候没有考虑到

1. all elements in nums are greater than or equal to k, l pointer never shift, should return l

2. all elements in nums are smaller than k, r pointer never shift, shoud return r+1

第一次做法(稍次)

1 public class Solution { 2     /**  3      *@param nums: The integer array you should partition 4      *@param k: As description 5      *return: The index after partition 6      */ 7     public int partitionArray(ArrayList
nums, int k) { 8 //write your code here 9 if (nums==null || nums.size()==0) return 0;10 int l=0, r=nums.size()-1;11 while (true) {12 while (l
=k) {13 r--;14 }15 while (l
=k) return r;22 if (r==nums.size()-1 && nums.get(l)
nums) {27 int temp = nums.get(l);28 nums.set(l, nums.get(r).intValue());29 nums.set(r, temp);30 }31 }

 第二次做法(推荐): 只要l,r 都动过,l停的位置就是first index that nums[i] >= k, 一般情况return l就好了

单独讨论l或者r没有动过的情况,l没有动过的情况还是return l, r没有动过的情况return r+1

1 public class Solution { 2     /**  3      *@param nums: The integer array you should partition 4      *@param k: As description 5      *return: The index after partition 6      */ 7     public int partitionArray(int[] nums, int k) { 8         //write your code here 9         if (nums==null || nums.length==0) return 0;10         int l=0, r=nums.length-1;11         while (true) {            12             while (l
=k) {16 r--;17 }18 if (l == r) break;19 swap(l, r, nums);20 }21 //if (l==0 && nums[l]>=k) return l;22 if (r==nums.length-1 && nums[r]

 

转载于:https://www.cnblogs.com/EdwardLiu/p/4385823.html

你可能感兴趣的文章
bzoj2961&&bzoj4140 共点圆
查看>>
DDRmenu(翻译)
查看>>
python xml解析和生成
查看>>
CSS - input 只显示下边框
查看>>
gulp下单页面应用打包
查看>>
python应用:爬虫实例(静态网页)
查看>>
012 webpack中的router
查看>>
用Monitor简单3步监控中间件ActiveMQ
查看>>
ANDROID_MARS学习笔记_S01原始版_018_SERVICE之Parcel
查看>>
迅为iTOP-4418开发板兼容八核6818开发板介绍
查看>>
com.fasterxml.jackson.databind.JsonMappingException
查看>>
【UVa 540】Team Queue
查看>>
Advanced Architecture for ASP.NET Core Web API
查看>>
数据结构(一)--线性表
查看>>
排序算法(二)
查看>>
4.4 多线程进阶篇<下>(NSOperation)
查看>>
如何更改Android的默认虚拟机地址(Android virtual driver路径设置)
查看>>
Python内置函数(36)——iter
查看>>
事件双向绑定原理
查看>>
HTML标签_1
查看>>