数组划分

作者: lyoungzzz | 来源:发表于2017-07-16 21:56 被阅读11次

    描述

    给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
    所有小于 k 的元素移到左边
    所有大于等于 k 的元素移到右边
    返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
    

    样例

    给出数组 nums = [3,2,2,1] 和 k = 2,返回 1.
    

    代码实现

    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;
            int right = nums.length - 1;
            while (left <= right) {
                while (left <= right && nums[left] < k) {
                    left++;
                } 
                //nums[right] >= k not nums[right] > k 
                while(left <= right && nums[right] >= k) {
                    right--;
                }
                //if  not while
                if (left <= right) {
                    int temp = nums[left];
                    nums[left] = nums[right];
                    nums[right] = temp;
                    left++;
                    right--;
                }
            }
            return left;
        }
    }
    

    相关文章

      网友评论

        本文标题:数组划分

        本文链接:https://www.haomeiwen.com/subject/bowucxtx.html