![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分查找与二叉排序树
唯有一颗慎独心
渴望力量使我成为琦玉
展开
-
二叉查找树编码与解码
题目: 序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。 设计一个算法来序列化和反序列化 二叉搜索树 。 对序列化/反序列化算法的工作方式没有限制。 您只需确保二叉搜索树可以序列化为字符串,并且可以将该字符串反序列化为最初的二叉搜索树。 编码的字符串应尽可能紧凑。 解析: 编码其实就是把Treenode中的值取出来,转化为字符串。 解码就是将字符串的值取出来,每个值依次初始化为Treenode,然后生成一个原创 2021-03-06 22:33:37 · 122 阅读 · 0 评论 -
旋转数组查找
题目: 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。 给你 旋转后 的数组 nums 和一个整原创 2021-03-06 16:31:39 · 562 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置
题目: 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 解析: 通过二分查找的方式来解析,先看一下左端点的方法: 右端点的方法: 代码: class Solution { public int[] searchRange(int[] nums, int target) { int left=left_bound(nums,target原创 2021-03-06 10:53:05 · 217 阅读 · 2 评论 -
插入位置
题目: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 解析: 我们可以采用循环的方式进行二分查找。 例如 代码: class Solution { public int searchInsert(int[] nums, int target) { int index=-1; int begin=0; int end = nums.l原创 2021-03-05 20:27:40 · 304 阅读 · 0 评论