Description
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.
给出一个整数数组 nums 和一个整数 k。划分数组(即移动数组 nums 中的元素),使得:
- 所有小于k的元素移到左边
- 所有大于等于k的元素移到右边
返回数组划分的位置,即数组中第一个位置 i,满足 nums[i] 大于等于 k。
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)?
Code
class Solution:
"""
@param nums: The integer array you should partition
@param k: An integer
@return: The index after partition
"""
def partitionArray(self, nums, k):
# write your code here
i ,j = 0, len(nums)-1
while i <= j:
while i <= j and nums[i]<k:
i+=1
while i<=j and nums[j]>=k:
j-=1
if i <=j :
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
return i