【LeetCode】二叉查找树 binary search tree(共14题)
链接:https://leetcode.com/tag/binary-search-tree/
【220】Contains Duplicate III (2019年4月20日) (好题)
Given an array of integers, find out whether there are two distinct indices i and j in the array such that the absolute difference between nums[i] and nums[j] is at most t and the absolute difference between i and j is at most k.
Example 1:
Input: nums = [1,2,3,1], k = 3, t = 0
Output: true
Example 2:
Input: nums = [1,0,1,1], k = 1, t = 2
Output: true
Example 3:
Input: nums = [1,5,9,1,5,9], k = 2, t = 3
Output: false
题解:
解法1. brute force。 O(NK)
解法2. set + lower_bound(), sliding window, time complexity: O(NlogK), space O(K)
解法3. bucket:unordered_map<int, int> : key bucket idx, value nums[i], time complexity: O(N), space: O(K)
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
if (k <= || t < ) {return false;}
set<int> st;
for (int i = ; i < nums.size(); ++i) {
int num = nums[i];
auto iter = st.lower_bound(num);
if (iter != st.end()) {
int greater = *iter;
if ((long)greater - num <= t) {return true;}
}
if (iter != st.begin()) {
--iter;
int less = *iter;
if ((long)num - less <= t) {return true;}
}
if (st.size() == k) {
st.erase(nums[i-k]);
}
st.insert(num);
}
return false;
}
};
solution2
class Solution {
public:
bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {
if (nums.empty() || k <= || t < ) {return false;}
long bucketSize = (long)t + ;
int minn = nums.front();
for (auto& num : nums) {
minn = min(num, minn);
}
unordered_map<long, int> bucket; //key: bucketIdx, value: nums[i]
for (int i = ; i < nums.size(); ++i) {
long bucketIdx = ((long)nums[i] - minn) / bucketSize;
if (bucket.count(bucketIdx)) {return true;}
int left = bucketIdx - , right = bucketIdx + ;
if (bucket.count(left) && (long)nums[i] - bucket[left] <= t) {return true;}
if (bucket.count(right) && (long)bucket[right] - nums[i] <= t) {return true;}
if (i >= k) {
long removeKey = ((long)nums[i-k] - minn) / bucketSize;
bucket.erase(removeKey);
}
bucket[bucketIdx] = nums[i];
}
return false;
}
};
solution3
【315】Count of Smaller Numbers After Self
【327】Count of Range Sum
【352】Data Stream as Disjoint Intervals
【493】Reverse Pairs
【530】Minimum Absolute Difference in BST (2019年3月10日)(Easy)
返回一棵 BST的两个结点的最小绝对值的距离之差。
Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.
题解:根据 BST 的性质,我们只需要用一个变量记录中序遍历的前一个结点prev即可。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int getMinimumDifference(TreeNode* root) {
if (!root) {return ;}
inorder(root);
return res;
}
int res = INT_MAX;
TreeNode* prev = nullptr;
void inorder(TreeNode* root) {
if (!root) {return;}
inorder(root->left);
if (prev) {
res = min(res, root->val - prev->val);
}
prev = root;
inorder(root->right);
return;
}
};
【683】K Empty Slots
【699】Falling Squares
【715】Range Module
【731】My Calendar II (2019年3月21日)
题意是每次给定一个 event [start, end) ,如果插入这个 event 之后, 当前有个时刻的同时进行的 event 的数量大于等于 3,那么就不插入这个 event,返回这个 event 能不能被插入。
此题只要找出所有与[start,end)重合的区间,再检查这些区间是否有互相的重合。是的话,说明必然有triple booking。
【732】My Calendar III (2019年3月21日)
题意是每次插入一个 event,返回插入这个event之后,对于任意一个时刻,同时在进行的 event 有多少个。
https://leetcode.com/problems/my-calendar-iii/description/
sweep line 的思想,用一个 multiset,记录 event 和 event 类型,如果是 start,event就表示成{start, 1}, 如果是 end,event 就表示成 {end, -1},然后每次插入之后,去遍历 multiset,如果碰到 1, 就 +1, 如果碰到 -1 ,就 -1。
【776】Split BST
【783】Minimum Distance Between BST Nodes (2019年3月10日)(Easy)
返回一棵 BST的两个结点的最小的距离之差。
Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree.
题解:同上面 530 题,一样的解法。
【938】Range Sum of BST
【LeetCode】二叉查找树 binary search tree(共14题)的更多相关文章
- LeetCode: Validata Binary Search Tree
LeetCode: Validata Binary Search Tree Given a binary tree, determine if it is a valid binary search ...
- [leetcode]Recover Binary Search Tree @ Python
原题地址:https://oj.leetcode.com/problems/recover-binary-search-tree/ 题意: Two elements of a binary searc ...
- 算法与数据结构基础 - 二叉查找树(Binary Search Tree)
二叉查找树基础 二叉查找树(BST)满足这样的性质,或是一颗空树:或左子树节点值小于根节点值.右子树节点值大于根节点值,左右子树也分别满足这个性质. 利用这个性质,可以迭代(iterative)或递归 ...
- [LeetCode] Validate Binary Search Tree 验证二叉搜索树
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- [Leetcode] Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- LeetCode Closest Binary Search Tree Value II
原题链接在这里:https://leetcode.com/problems/closest-binary-search-tree-value-ii/ 题目: Given a non-empty bin ...
- LeetCode Closest Binary Search Tree Value
原题链接在这里:https://leetcode.com/problems/closest-binary-search-tree-value/ Given a non-empty binary sea ...
- [LeetCode] Closest Binary Search Tree Value II 最近的二分搜索树的值之二
Given a non-empty binary search tree and a target value, find k values in the BST that are closest t ...
- [LeetCode] Closest Binary Search Tree Value 最近的二分搜索树的值
Given a non-empty binary search tree and a target value, find the value in the BST that is closest t ...
随机推荐
- SpringCloud 教程 (五) 断路器监控(Hystrix Dashboard)
一.Hystrix Dashboard简介 在微服务架构中为例保证程序的可用性,防止程序出错导致网络阻塞,出现了断路器模型.断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标.Hystrix ...
- postgresql批量删除表
CREATE FUNCTION del_ora_table() RETURNS void AS $$ DECLARE tmp ); DECLARE names CURSOR FOR select ta ...
- 线性中继器 Linear Repeater
线性中继器(Linear Repeater,缩写L-REP) 高速信号在传输介质上传递时,信号衰减和噪声会导致有效数据信号越来越弱.L-REP就是用来再生高速信号,通过使用同等化(Equalizat ...
- 从 spring-cloud-alibaba-nacos-config 进入 nacos-client
sc 的 bootstrap context 是 main application context 的 parent,需要在 main application context 中使用的 bean 可以 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_2_使用泛型的好处
用一个案例说明使用泛型和不是用泛型的区别 这里的ArrayList没写数据类型,不写就是默认Object 多态的弊端,不能使用子类特有的方法 向下转型,转换为String类型,才能使用length 不 ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_04 IO字节流_4_字节输出流写入数据到文件
数据由内存写入到硬盘中 构造函数传的路径是一个相对路径.有异常需要捕获异常 释放资源 这三个方法,都有异常 IO异常是父类,所以这里只需要抛出IO异常就可以了. 运行程序.目录内多了个a.txt文件 ...
- 字符串 映射相应的 函数 字符串驱动技术—— MethodAddress , MethodName , ObjectInvoke
http://blog.csdn.net/qustdong/article/details/7267258 字符串驱动技术—— MethodAddress , MethodName , ObjectI ...
- 16/7/8_PHP-字符串介绍
不知道为什么慕课网还这个都要介绍.不过还是一个新的知识点. PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号2.双引号3 ...
- SpringBoot错误经验
1.在application.properties 添加 debug=true,可以看见项目的执行流程有助于调bug 2.如果错误显示端口号被占用 cmd 步骤1 查看端口号应用情况:netstat ...
- unity全屏截图
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...