4-8使用树结构(1题)
[TOC]
(难,常考)例题1:LeetCode 第 220 题
![image-20191123213851025](/Users/liwei/Library/Application Support/typora-user-images/image-20191123213851025.png)
题目要求:存在重复元素 III。给定一个整数数组,判断数组中是否有两个不同的索引 i 和 j,使得 nums [i] 和 nums [j] 的差的绝对值最大为 t,并且 i 和 j 之间的差的绝对值最大为 ķ。
题目难度:中等。
中文网址:https://leetcode-cn.com/problems/contains-duplicate-iii/description/
英文网址:https://leetcode.com/problems/contains-duplicate-iii/
求解关键:此时使用的查找表应该支持排序操作,特别是支持 ceil 和 floor 操作。
思路1:使用 TreeSet。
[5,2,8,7,12]
数的差的绝对值是 t,索引的差的绝对值是 k。
假设 k = 3,t=2。考虑 0、1。
5,2,8 => 3,6 t=2,不存在。
2,8,7 => 1
这道题要画一个线段图来求解一下。
![image-20191123213928625](/Users/liwei/Library/Application Support/typora-user-images/image-20191123213928625.png)
这是这个问题第 1 版的解法:在逻辑上不存在什么问题了。
![image-20191123213948169](/Users/liwei/Library/Application Support/typora-user-images/image-20191123213948169.png)
提交以后有一个陷阱。
所以有整形溢出。
![image-20191123214001377](/Users/liwei/Library/Application Support/typora-user-images/image-20191123214001377.png)
思路2:使用桶排序。
我的解答:https://gist.github.com/liweiwei1419/a047eceb6c30525d420d940cf668665b
参考资料:
思考总结:
要注意下面这个问题。
![image-20191123214034815](/Users/liwei/Library/Application Support/typora-user-images/image-20191123214034815.png)
![image-20191123214051803](/Users/liwei/Library/Application Support/typora-user-images/image-20191123214051803.png)