Python每日一练(20230506) 存在重复元素I、II、III

这篇具有很好参考价值的文章主要介绍了Python每日一练(20230506) 存在重复元素I、II、III。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python每日一练(20230506) 存在重复元素I、II、III

目录

1. 存在重复元素 Contains Duplicate I

2. 存在重复元素 Contains Duplicate II

3. 存在重复元素 Contains Duplicate III

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 存在重复元素 Contains Duplicate I

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。

示例 1:

输入:nums = [1,2,3,1]
输出:true

示例 2:

输入:nums = [1,2,3,4]
输出:false

示例 3:

输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true

提示:

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9

代码: 多种方法实现

from typing import List
class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, n):
                if nums[i] == nums[j]:
                    return True
        return False

    def containsDuplicate2(self, nums: List[int]) -> bool:
        num_set = set()
        for num in nums:
            if num in num_set:
                return True
            num_set.add(num)
        return False

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

    def containsDuplicate4(self, nums: List[int]) -> bool:
        return len(nums) != len(set(nums))


if __name__ == '__main__':
    s = Solution()
    nums = [1,2,3,1]
    print(s.containsDuplicate(nums))
    print(s.containsDuplicate2(nums))
    print(s.containsDuplicate3(nums))
    print(s.containsDuplicate4(nums))
    nums = [1,2,3,4]
    print(s.containsDuplicate(nums))
    print(s.containsDuplicate2(nums))
    print(s.containsDuplicate3(nums))
    print(s.containsDuplicate4(nums))
    nums = [1,1,1,3,3,4,3,2,4,2]
    print(s.containsDuplicate(nums))
    print(s.containsDuplicate2(nums))
    print(s.containsDuplicate3(nums))
    print(s.containsDuplicate4(nums))

输出:

True
True
True
True
False
False
False
False
True
True
True
True


2. 存在重复元素 Contains Duplicate II

给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。

示例 1:

输入:nums = [1,2,3,1], k = 3
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1
输出:true

示例 3:

输入:nums = [1,2,3,1,2,3], k = 2
输出:false

提示:

  • 1 <= nums.length <= 10^5
  • -10^9 <= nums[i] <= 10^9
  • 0 <= k <= 10^5

代码: 多种方法实现

from typing import List
class Solution:
    def containsNearbyDuplicate(self, nums: List[int], k: int) -> bool:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, min(i + k + 1, n)):
                if nums[i] == nums[j]:
                    return True
        return False

    def containsNearbyDuplicate2(self, nums: List[int], k: int) -> bool:
        num_index = {}
        for i in range(len(nums)):
            if nums[i] in num_index and i - num_index[nums[i]] <= k:
                return True
            num_index[nums[i]] = i
        return False

    def containsNearbyDuplicate3(self, nums: List[int], k: int) -> bool:
        n = len(nums)
        if k >= n:
            k = n - 1
        num_set = set(nums[:k + 1])
        if len(num_set) != k + 1:
            return True
        for i in range(k + 1, n):
            num_set.remove(nums[i - k - 1])
            if nums[i] in num_set:
                return True
            num_set.add(nums[i])
        return False


if __name__ == '__main__':
    s = Solution()
    nums = [1,2,3,1]
    print(s.containsNearbyDuplicate(nums, 3))
    print(s.containsNearbyDuplicate2(nums, 3))
    print(s.containsNearbyDuplicate3(nums, 3))
    nums = [1,0,1,1]
    print(s.containsNearbyDuplicate(nums, 1))
    print(s.containsNearbyDuplicate2(nums, 1))
    print(s.containsNearbyDuplicate3(nums, 1))
    nums = [1,2,3,1,2,3]
    print(s.containsNearbyDuplicate(nums, 2))
    print(s.containsNearbyDuplicate2(nums, 2))
    print(s.containsNearbyDuplicate3(nums, 2))

输出:

True
True
True
True
True
True
False
False
False


3. 存在重复元素 Contains Duplicate III

给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 

如果存在则返回 true,不存在返回 false

示例 1:

输入:nums = [1,2,3,1], k = 3, t = 0
输出:true

示例 2:

输入:nums = [1,0,1,1], k = 1, t = 2
输出:true

示例 3:

输入:nums = [1,5,9,1,5,9], k = 2, t = 3
输出:false

提示:

  • 0 <= nums.length <= 2 * 10^4
  • -2^31 <= nums[i] <= 2^31 - 1
  • 0 <= k <= 10^4
  • 0 <= t <= 2^31 - 1

代码: 多种方法实现

from typing import List
import bisect
class Solution:
    def containsNearbyAlmostDuplicate(self, nums: List[int], k: int, t: int) -> bool:
        n = len(nums)
        for i in range(n):
            for j in range(i + 1, min(i + k + 1, n)):
                if abs(nums[i] - nums[j]) <= t and abs(i - j) <= k:
                    return True
        return False

    def containsNearbyAlmostDuplicate2(self, nums: List[int], k: int, t: int) -> bool:
        n = len(nums)
        if t < 0 or k <= 0:
            return False
        bst = []
        for i in range(n):
            idx = bisect.bisect_left(bst, nums[i] - t)
            if idx < len(bst) and abs(bst[idx] - nums[i]) <= t:
                return True
            bisect.insort(bst, nums[i])
            if i >= k:
                bst.remove(nums[i - k])
        return False

    def containsNearbyAlmostDuplicate3(self, nums: List[int], k: int, t: int) -> bool:
        if t < 0 or k <= 0:
            return False
        n = len(nums)
        dic = dict()
        w = t + 1
        for i in range(n):
            m = nums[i] // w
            if m in dic:
                return True
            elif m - 1 in dic and abs(nums[i] - dic[m - 1]) < w:
                return True
            elif m + 1 in dic and abs(nums[i] - dic[m + 1]) < w:
                return True
            dic[m] = nums[i]
            if i >= k:
                del dic[nums[i - k] // w]
        return False


if __name__ == '__main__':
    s = Solution()
    nums = [1,2,3,1]
    print(s.containsNearbyAlmostDuplicate(nums, 3, 0))
    print(s.containsNearbyAlmostDuplicate2(nums, 3, 0))
    print(s.containsNearbyAlmostDuplicate3(nums, 3, 0))
    nums = [1,0,1,1]
    print(s.containsNearbyAlmostDuplicate(nums, 1, 2))
    print(s.containsNearbyAlmostDuplicate2(nums, 1, 2))
    print(s.containsNearbyAlmostDuplicate3(nums, 1, 2))
    nums = [1,5,9,1,5,9]
    print(s.containsNearbyAlmostDuplicate(nums, 2, 3))
    print(s.containsNearbyAlmostDuplicate2(nums, 2, 3))
    print(s.containsNearbyAlmostDuplicate3(nums, 2, 3))

输出:

True
True
True
True
True
True
False
False
False


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/文章来源地址https://www.toymoban.com/news/detail-437697.html

Python每日一练(20230506) 存在重复元素I、II、III

Golang每日一练 专栏

Python每日一练(20230506) 存在重复元素I、II、III

Python每日一练 专栏

Python每日一练(20230506) 存在重复元素I、II、III

C/C++每日一练 专栏

Python每日一练(20230506) 存在重复元素I、II、III

Java每日一练 专栏

到了这里,关于Python每日一练(20230506) 存在重复元素I、II、III的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • LeetCode150道面试经典题-- 存在重复元素 II(简单)

    给你一个整数数组  nums 和一个整数  k ,判断数组中是否存在两个 不同的索引   i  和   j ,满足 nums[i] == nums[j] 且 abs(i - j) = k 。如果存在,返回 true ;否则,返回 false 。 示例 1:   输入:nums = [1,2,3,1], k = 3 输出:true 示例 2:   输入:nums = [1,0,1,1], k = 1 输出:true  示例

    2024年02月12日
    浏览(46)
  • Python每日一练(20230514) 不同路径 I\II\III UniquePaths

    目录 1. 不同路径 I Unique Paths 1 2. 不同路径 II Unique Paths 2 3. 不同路径 III Unique Paths 3 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 一个机器人位于一个  m x n   网格的左上角 (起始点在下图中标记为 “Start” )。 机器

    2024年02月04日
    浏览(40)
  • C# 存在重复元素

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 提示: 1 = nums.length = 105 -1

    2024年02月16日
    浏览(28)
  • 力扣坑题:存在重复元素

    本题有巨量数据和针对快排的数据,所以要用三路分治秒

    2024年02月19日
    浏览(39)
  • Java每日一练(20230516) 最小栈、组合总和II、相同的树

    目录 1. 最小栈  🌟 2. 组合总和 II  🌟🌟 3. 相同的树  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 设计一个支持  push  , pop  , top  操作,并能在常数时间内检索到最小元素的栈。 push(x)  —— 将元素 x

    2024年02月05日
    浏览(37)
  • 【LeetCode-SQL每日一练】—— 196. 删除重复的电子邮箱

    🙋‍♂️大家好呀,我是 超梦 。大家可以叫我 小梦 ~ 小伙伴们都知道,不管是在学习中还是日常工作中,几乎天天是要跟 数据库 打交道的,为了更好的操作数据库,我们的 SQL知识储备 是必不可少的。想要掌握好SQL,那少不了每天的练习与学习。接下来小梦会带领小伙伴

    2023年04月08日
    浏览(54)
  • 力扣(LeetCode)算法_C++—— 存在重复元素

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 提示: 1 = nums.length = 105 -1

    2024年02月09日
    浏览(46)
  • 【LeetCode刷题(数组and排序)】:存在重复元素

    给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 示例 1: 输入:nums = [1,2,3,1] 输出:true 示例 2: 输入:nums = [1,2,3,4] 输出:false 示例 3: 输入:nums = [1,1,1,3,3,4,3,2,4,2] 输出:true 在对数字从小到大排序之后,数

    2024年02月07日
    浏览(51)
  • C/C++每日一练(20230221) 格雷编码、矩阵问题、搜索旋转排序数组II

    目录 1. 格雷编码 2. 矩阵问题 3. 搜索旋转排序数组 II 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。 给定一个代表编码总位数的非负整数  n ,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。 格雷编码序列必须

    2024年02月16日
    浏览(54)
  • Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

    目录 58. 最后一个单词的长度 Length of Last Word  🌟 59. 螺旋矩阵 II Spiral Matrix II  🌟🌟 60. 排列序列 Permutation Sequence  🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个字符串  s ,由

    2024年02月10日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包