[096-Unique Binary Search Trees(唯一二叉搜索树)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given n, how many structurally unique BST's (binary search trees) that store values 1-n? For example, Given n = 3, there are a total of 5 unique BST's. 1 3 3 2 1 \ / / /…
地球人都知道“二分查找”,方法也非常简单,但是你能不能在10分钟内写出一个没有bug的程序呢? 知易行难,自己动手写一下试一试吧. public class BinarySearch { public static int search(int [] A,int target,int a, int b) { int middle = (a+b)/2; if(a>b) return -1; else if (A[middle]==target) return middle; else if (A[…
前言 之前面试准备秋招,重新翻起了<编程之美>.在第三章节看到了一道关于二分搜索的讨论,觉得有许多细节是自己之前也没怎么特别注意地方,比如二分搜索的初始条件,转化.终止条件之类的. 问题 找出一个有序(字典序)字符串数组 arr 中值等于字符串v的元素的序号,如果有多个元素满足这个条件,则返回其中序号最大的. 分析 如果去掉"返回序号最大的",则标准的二分解法.但是数据中有重复元素,要求返回序号序号最大的元素序号. 以下是有BUG的解法: int bisearch(int*…
这是悦乐书的第197次更新,第203篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第59题(顺位题号是235).给定二叉搜索树(BST),找到BST中两个给定节点的最低共同祖先(LCA).根据维基百科上LCA的定义:"最低共同祖先在两个节点p和q之间定义为T中的最低节点,其中p和q都是后代(我们允许节点成为其自身的后代)." 给定二叉搜索树:root = [6,2,8,0,4,7,9,null,null,3,5] 6 / \ 2 8 / \ / \ 0 4…
二分搜索是一种在有序数组中寻找目标值的经典方法,也就是说使用前提是『有序数组』.非常简单的题中『有序』特征非常明显,但更多时候可能需要我们自己去构造『有序数组』.下面我们从最基本的二分搜索开始逐步深入. 一.lower/upper bound 定义 lower bound 为在给定升序数组中大于等于目标值的最小索引,upper bound 则为小于等于目标值的最大索引,下面上代码和测试用例. import java.util.*; public class Main { public stati…
以前有个游戏,一方写一个数字,另一方猜这个数字.比如0-100内一个数字,看谁猜中用的次数少. 这个里面用折半思想猜会大大减少次数. 步骤:(加入数字为9) 1.因为数字的范围是0-100,所以第一次猜50(100的一半) 2.缩小范围到0-50,根据对方回应数大了,再猜25(50的一半) 3.缩小范围到0-25,对方回应数大了,再猜13 4.缩小范围到0-13,对方回应数大了,再猜7 5.缩小范围到7-13,对方回应数小了,再猜10 6.缩小范围到7-10,对方回应数大了,再猜9,中 真是比较…
InsertSort中有关键的一步是把当前元素A[i]插入到已经排好序的A[1,i-1]的合适的位置上,在原始的InsertSort算法中, 采用的是从后往前一步一步查找的方法,习题2.3-6要求利用习题2.3-5中的binary search的方法,加速这个插入的过程. 把binary search 的算法稍加修改,就可以返回正确的,插入元素的位置: public static int findInsertPlace(int [] A,int target,int a, int b) { in…
开始学习<算法导论>了,虽然是本大部头,可能很难一下子看完,我还是会慢慢地研究的. 课后的习题和思考有些是很有挑战性的题目,我等蒻菜很难独立解决. 然后发现了Google上有挺全的algorithmssolution的site (目测by xiazdong大神). 但竟然要FQ实在是难以接受. 于是我决定开坑!把它们慢慢地搬运过来,当然这之中我会从中学习并好好研究的. 我会慢慢更新搬运过来的地址的,这是一个大坑,请容我慢慢填. Chapter 22.1-1(入度和出度) Chapter 22.…
(搬运)<算法导论>习题解答 Chapter 22.1-1(入度和出度) 思路:遍历邻接列表即可; 伪代码: for u 属于 Vertex for v属于 Adj[u] outdegree[u]++; indegree[v]++; 源代码: package C22; import java.util.Iterator; public class C1_1 { static int[] indegree; static int[] outdegree; static Adjacent_List…
很高兴能和大家一起共同学习算法导论这本书.笔者将在业余时间把算法导论后面的题解以博文的形式展现出来希望能得到大家的支持谢谢.如果有可能我会做一些教学视频免费的供大家观看. 练习题选自算法导论中文第三版第6页中的练习. 1.1-1 给出现实生活中需要排序的一个例子或者现实生活中需要计算凸壳的一个例子. 这个问题有俩个子问题.我一一解答: (1) 首先是排序,日常需要排序的地方很多,例如今日微博热搜等等这个不用细说了. (2)但是关于第二个问题我需要多写一点. 第一这本书的翻译的地方有误,凸壳在这里…