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测试用例需求,其实对程序功能毫无用处。

原文地址:https://www.cnblogs.com/rounie/p/13510969.html