题目描述:
在整数数组 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测试用例需求,其实对程序功能毫无用处。