#31 Partition Array

原创 2016年08月29日 11:21:23

题目描述:

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 right

Return the partitioning index, i.e the first index i nums[i] >= k.

 Notice

You 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

Example

If nums = [3,2,2,1] and k=2, a valid answer is 1.

Challenge 

Can you partition the array in-place and in O(n)?

题目思路:

这题也可以用two pointers的想法,l和r指针一个在头,一个在尾,i从0....r遍历,如果nums[i] < k,就l和i上的值交换;反之,则让r和i上的值交换。这里要注意的是,r换给i的值可能是个< k的东西,这种情况下,需要再和l换一次。

Mycode(AC = 13ms):

class Solution {
public:
    int partitionArray(vector<int> &nums, int k) {
        // write your code here
        if (nums.size() == 0) return 0;
        
        int l = 0, r = nums.size() - 1;
        for (int i = 0; i <= r; i++) {
            // swap left and index if nums[i] < k
            if (nums[i] < k) {
                swap(nums, i, l);
                l++;
            }
            // swap right and index if nums[i] < k
            else {
                swap(nums, i, r);
                // it is possible that the original
                // nums[r] is smaller than k, in that
                // case, should do another swap between
                // l and old i
                if (nums[i] < k) i--;
                r--;
            }
        }
        
        return l;
    }
    
    void swap(vector<int> &nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
};


版权声明:三千微尘里,吾宁爱与憎

[leetcode: Python]561. Array Partition I

Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1...
  • NXHYD
  • NXHYD
  • 2017年05月19日 16:20
  • 1113

[LeetCode]561. Array Partition I (数组分区 1)

561. Array Partition IGiven an array of 2n integers, your task is to group these integers into n pai...
  • whl_program
  • whl_program
  • 2017年04月25日 00:21
  • 3847

LeetCode 561 Array Partition I(数组划分)

翻译原文Given an array of 2n integers, your task is to group these integers into n pairs of integer, say...
  • NoMasp
  • NoMasp
  • 2017年05月05日 21:07
  • 2739

【LeetCode】Array Partition I 解题报告

【LeetCode】Array Partition I 解题报告标签(空格分隔): LeetCode题目地址:https://leetcode.com/problems/array-partition...
  • fuxuemingzhu
  • fuxuemingzhu
  • 2017年05月08日 14:41
  • 711

561. Array Partition I(Java)

Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1...
  • Crystal_ting
  • Crystal_ting
  • 2017年08月11日 16:57
  • 163

561. Array Partition I的C++解法

尽量把小的数字分到一组就可以了。用快排,然后把0,2,4,6...个数相加。一开始写了个插排超时了。 class Solution { public: void quickSort(vector& ...
  • musechipin
  • musechipin
  • 2017年04月25日 16:37
  • 405

Array Partition I,数组分对中最小值的和最大值

package leetCode; import java.util.Arrays; //给定一个长度为2n的整数数组,将数组分成n组,求每组数的最小值之和的最大值。 /*[1,2,3,4]  *...
  • u014043709
  • u014043709
  • 2017年05月08日 11:07
  • 434

leetcode-561(Array Partition I)

Decription Given an array of 2n integers, your task is to group these integers into n pairs of ...
  • u011573551
  • u011573551
  • 2017年06月02日 10:58
  • 255

Partition Array的总结

原题地址:http://www.lintcode.com/zh-cn/problem/partition-array/ 一.目的:根据给定K值划分数组 二.思路:1)设置左右两个指针位置,分别寻找...
  • u012255731
  • u012255731
  • 2016年09月28日 16:27
  • 429

561. Array Partition I(C语言)

这道题什么鬼 不应该输出5,[2,3],一组,[1,4]一组么 Given an array of 2n integers, your task is to group these integers ...
  • yanqueen2011
  • yanqueen2011
  • 2017年05月10日 11:03
  • 576
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:#31 Partition Array
举报原因:
原因补充:

(最多只允许输入30个字)