【问题标题】:Question about leetcode 217: Contains Duplicate关于leetcode 217的问题:包含重复
【发布时间】:2021-12-02 11:57:24
【问题描述】:

我正在做 leetcode 问题 #217:包含重复项。 检查答案后,我无法理解代码的某些部分。问题如下:

Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.

Example 1:
Input: nums = [1,2,3,1]
Output: true

Example 2:
Input: nums = [1,2,3,4]
Output: false

答案如下:

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        nums.sort()
        for i in range(0,len(nums)-1):
            if nums[i] == nums[i+1]:
                return True
        return False

以下是我的问题:

在我的理解中,循环通过range(0,len(nums)-1) 可以让我们检查和比较num[0:-2] 中的字符,但是最后两个字符呢? 如果我们有nums 像[2,14,18,22,22],我们如何比较这两个字符。 而对于最后两行,为什么我们不能直接使用return False 而不是使用if...else... 结构呢? 这里的逻辑是怎么写的?

感谢任何可以澄清我的难题的人!

【问题讨论】:

  • 仅供参考:彻底回答问题非常耗时。如果您的问题已解决,请通过接受最适合您的需求的解决方案表示感谢。✔ 位于答案左上角的 ▲/▼ 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您还可以使用 ▲/▼ 箭头对答案的有用性进行投票。 如果解决方案无法回答问题,请发表评论。 What should I do when someone answers my question?。谢谢。

标签: python arrays sorting hashtable


【解决方案1】:

range(start, end, step 函数从 start, start+1, start+2 ... end-1 工作,其中 end 是独占的,而 start 是包含的。 即对于range(0,100,1),它将变为0,1,2,3,4,5......96,97,98,99。

如果您的代码正在检查第 i 个字符和第 (i+1) 个字符。所以在最后一个索引ie (len(num)-2) 中,您正在检查包含最后一个元素的len(num)-2 和len(num)-1 字符。

现在为什么直接返回false。如果在此声明之前到达程序,则考虑到所有元素都是不同的。如果找到任何重复项,则会在 for 循环中找到它。

【讨论】:

    【解决方案2】:

    您正在比较最后两个元素。当i == len(nums)-2 时,您将nums[i] 与nums[i+1] 进行比较。这是最后两个元素。

    您不需要if/else。一旦找到重复项,您就会立即从函数中返回。所以到达循环结束的唯一方法是没有重复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2011-08-13
      • 1970-01-01
      • 2013-04-03
      • 2019-06-02
      • 1970-01-01
      • 2011-06-08
      相关资源
      最近更新 更多