不太理解这句语句和题目要求的逻辑关系

来源:4-8 二分搜索树底层实现的顺序性 Contain Duplicate III

第二凶

2020-09-18

老师你好,在4-8节中,题目要求是否存在两个下标 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值小于等于 t 。课上给出的对应java代码为 if(record.ceiling((long)nums[i] - (long)t) != null && record.ceiling((long)nums[i] - (long)t) <= (long)nums[i] + (long)t)。这里我不太能理解,为什么当nums[i] - t存在并且小于nums[i] + t 时就可以证明nums[i] 和nums[j]的差的绝对值小于等于t。并且,是否存在nums[i]或nums[j]为负数的情况?

写回答

1回答

liuyubobobo

2020-09-19

record.ceiling((long)nums[i] - (long)t) 的意思不是 nums[i] - t 存在,而是存在大于等于 nums[i] - t 的数,取所有大于等于 nums[i] - t 的数中的最小值。


假设这个值是 x,就是 nums[i] - t <= x。我们又要求了 x <= nums[i] + t,所以:

nums[i] - t <= x <= nums[i] + t


这个式子的意思就是 |nums[i] - x| <= t。即我们找到了一个 x,和 nums[i] 的绝对值是小于等于 t 的。


继续加油!:)

1
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7465 学习 · 1159 问题

查看课程