不太理解这句语句和题目要求的逻辑关系
来源: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 的。
继续加油!:)
10
相似问题