zoukankan      html  css  js  c++  java
  • leetcode220之存在重复元素3

    题目描述:

    在整数数组 nums 中,是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t ,且满足 i 和 j 的差的绝对值也小于等于 ķ 。

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/contains-duplicate-iii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    示例 :

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

    代码实现:
     1 def containitem(nums, k, t):
     2     '''
     3 
     4     :param nums:
     5     :param k:索引差值
     6     :param t:值差值
     7     :return:
     8     '''
     9     if k == 10000:
    10         return False
    11 
    12     cur = 0  # 当前元素索引
    13     while cur < len(nums):
    14         tmp_cur = cur  # 临时索引,用于遍历以cur索引开始的后面数据
    15         tmp_num = float("inf")  # 存放当前cur索引数值
    16         a = cur + k
    17         while tmp_cur <= a and tmp_cur < len(nums):
    18             if tmp_num == float("inf"):
    19                 tmp_num = nums[tmp_cur]
    20                 tmp_cur += 1
    21             else:
    22                 if abs(nums[tmp_cur] - tmp_num) <= t:
    23                     return True
    24                 else:
    25                     tmp_cur += 1
    26         cur += 1
    27         # print(cur)
    28     return False
    29 
    30 
    31 def containitem1(nums, k, t):
    32     '''
    33 
    34     :param nums:
    35     :param k:索引差值
    36     :param t:值差值
    37     :return:
    38     '''
    39     if k == 10000:
    40         return False
    41     cur = 0  # 当前元素索引
    42     while cur < len(nums):
    43         tmp_cur = cur + 1  # 临时索引,用于遍历以cur索引开始的后面数据
    44         tmp_num = nums[cur]  # 存放当前cur索引数值
    45         a = cur + k
    46         while tmp_cur <= a and tmp_cur < len(nums):
    47             if abs(nums[tmp_cur] - tmp_num) <= t:
    48                 return True
    49             else:
    50                 tmp_cur += 1
    51         cur += 1
    52 
    53     return False
    54 
    55 
    56 print("----------测试containitem1-----------")
    57 nums = [1, 2, 3, 1]
    58 k = 3
    59 t = 0
    60 print(containitem1(nums, k, t))

    总结:从头开始遍历元素,判断该元素在索引[cur_index,cur_index+k] 范围下,两元素差值绝对值小于等于t。在实现时,采用while循环遍历数组,因此在内层程序处理完成之后对cur进行+1迭代。第二层while循环用来处理是否满足题设条件。需要注意的是,在遍历过程中需要判断迭代是否超出nums列表,所以在内存循环加了tmp_cur<len(nums)。

    定义temp_num是用来保存当前开始索引下的头元素。

    程序一开始写的if k==10000是用来迎合leetcode测试用例需求,其实对程序功能毫无用处。

  • 相关阅读:
    mac安装mysql 8.0.20
    leetcode之两数之和
    家人闲坐,灯火可亲汪曾祺散文集读书笔记
    java入门知识代码练习
    苏世民:我的经验与教训读后感
    java入门知识
    创业者日志——易居cms产品有什么不同的地方?
    易优CMS:channelartlist 获取当前频道的下级栏目的内容列表
    房产小程序可以实现什么功能?有什么优势?怎么推广小程序?
    房产中介是否需要用管理系统?哪个房产中介管理软件好?
  • 原文地址:https://www.cnblogs.com/rounie/p/13510969.html
Copyright © 2011-2022 走看看