分区数组

2024-10-01 09:22:38 发布

您现在位置:Python中文网/ 问答频道 /正文

给定整数数组numsint k,对数组进行分区(即移动nums中的元素),以便:所有元素<;k都向左移动。将所有元素>;=k移到右侧 返回分区索引,即第一个索引inums[i] >= k。你知道吗

class Solution:
    def partitionArray(self, nums, k):
        # write your code here
        if nums == []:
            return 0
        left = 0
        i = 0
        while i <= len(nums):
            if nums[i] < k:
                i += 1
                left += 1
            else:
                r = nums[i]
                del nums[i]
                nums.append(r)
                i += 1

        return left

我的想法是把清单一个一个地看一遍。大于knum[i]将被删除并附加在num的末尾,小于k的将保留在原来的位置。一旦整个名单都通过了,所有较小的num都在前面。左边是一个计数器在这一点上返回。但是我不能用nums[i]解决这个问题。在列表的每个mod之后,计数器i不能指向列表中的正确项。你知道吗

我怎样才能根据这个想法写代码???你知道吗


Tags: ltgt元素列表returnif计数器整数
1条回答
网友
1楼 · 发布于 2024-10-01 09:22:38

你在找index(k)。这看起来像是一个家庭作业,所以你可能会被限制在什么内置功能,你可以使用。然而,一个pythonic的方法是

def solution(nums, k):
    return sorted(nums).index(k)

我建议你避免做一些事情。你知道吗

  1. 并发修改;循环列表时不应从列表中添加或删除。你知道吗
  2. 不能循环到i==len(nums),因为列表索引从0开始。你知道吗

因为您实际上只是在寻找index(k),所以只需要跟踪小于k的数字,而不必担心重新组织列表。你知道吗

class Solution:
    def partitionArray(self,nums, k):
        # write your code here
        if nums == []:
            return 0
        left = 0
        i = 0
        while i < len(nums):
            if nums[i] < k:
                left += 1
            i += 1

        return left

相关问题 更多 >