分区阵列

时间:2019-01-13 07:45:36

标签: python python-3.x

给出一个整数数组SELECT ROUND(SQRT(POWER(MIN(LAT_N)-MAX(LAT_N),2) + POWER(MIN(LONG_W)-MAX(LONG_W),2)),4) FROM STATION;和一个nums,对该数组进行分区(即,将int k中的元素移动),使得:所有 = k的元素都移到右边 返回分区索引,即第一个索引i nums

nums[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 的{​​{1}}将被删除并追加到num[i]的末尾,小于k的{​​{1}}将保留在原始位置。一旦整个列表通过,所有较小的数字都位于最前面。左边是此时的返回计数器。但是我无法解决num的问题。在列表中的每个mod之后,计数器k无法指向列表中的正确项目。

我如何基于这个想法编写代码?

1 个答案:

答案 0 :(得分:3)

您正在寻找index(k)。这似乎是一项家庭作业,因此您可能仅限于可以使用的内置功能。但是,pythonp的方法是

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

您正在做一些我建议避免的事情。

  1. 并发修改;循环播放时,您不应在列表中添加或删除列表。
  2. 因为列表索引从0开始,所以您不能循环到i == len(nums)。

由于您实际上只是在寻找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