Classic Q: Partition Array

Given an arraynumsof integers and an intk, 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 _right

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

If nums =[3,2,2,1]andk=2, a valid answer is1

public int partitionArray(int[] nums, int k) {
        //write your code here
        //Using two pointers
        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){
                //swqp
                int temp = nums[left];
                nums[left] = nums[right];
                nums[right] = temp;

                left++;
                right--;
            }
        }
        return left;
    }

results matching ""

    No results matching ""