![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
加油加油坚持学算法
加油加油坚持学算法 目标每天1~2道算法题
zhendeWD
这个作者很懒,什么都没留下…
展开
-
【题26 树的子结构】
【题26 树的子结构】【题目】输入两棵二叉树A和B判断B是不是A的子结构。例如:如图两棵二叉树,由于A中有一部分子树的结构和B是一样的,因此B是A的子结构要查找树A中是否存在和树B结构一样的子树。分2步第一步,在树A中找到和树B的根节点的值一样的节点R;第二步,判断树A中以R为根节点的子树是不是包含和树B一样的结构。例,(1)首先在A中找到值为8(树B的根节点的值)的节点,从树...原创 2019-03-06 10:57:28 · 108 阅读 · 0 评论 -
【题14 剪绳子】Java实现
https://www.jianshu.com/p/43acdf2f23c5原创 2019-01-12 14:30:08 · 182 阅读 · 0 评论 -
获取最小值栈——优化
题目:我现在需要实现一个栈,这个栈除了可以进行普通的push、pop操作以外,还可以进行getMin的操作,getMin方法被调用后,会返回当前栈的最小值,你会怎么做呢?你可以假设栈里面存的都是int整数。思路实现import java.util.ArrayList;import java.util.List;public class 获取最小值栈 { private List&...原创 2019-04-11 09:56:24 · 162 阅读 · 0 评论 -
【题15 二进制中1的个数】Java实现
位运算位运算时把数字用二进制表示之后,对每一位上0或者1的运算。二进制:指数字的每一位都是0或者1.二进制种有五种运算:与、或、异或、左移和右移左移运算符m << n:表示把m左移n位。左移n位的时候,最左边的n位将被丢弃。同时在最右边补上n个0.比如右移运算符m >> n:表示把m右移n位。右移n位的时候,最右边的n位将被丢弃。如果数字是一个无符...原创 2019-01-12 16:42:59 · 158 阅读 · 0 评论 -
leetcode-top面试题 3的幂
题目给定一个整数,写一个函数来判断它是否是 3 的幂次方。示例 1:输入: 27输出: true示例 2:输入: 0输出: false示例 3:输入: 9输出: true示例 4:输入: 45输出: false来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/power-of-three 著作权归领扣网络所有。商业转...原创 2019-07-24 10:44:27 · 106 阅读 · 0 评论 -
【题50】 第一个只出现一次的字符
【题目】在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).【思路】可以统计字符串中每个字符的出现次数,1.使用两个list记录出现过的字符【实现】import java.util.ArrayList;import java.util.List;public class S...原创 2019-03-17 14:53:50 · 177 阅读 · 0 评论 -
酷狗2018——买橘子
【题目】题目描述小明去附近的水果店买橙子,水果商贩只提供整袋购买有每袋6个和每袋8个的包装(包装不可拆分)。可是小明只想购买恰好n个橙子,并且尽量少的袋数方便携带。如果不能购买恰好n个橙子,小明将不会购买。输入描述: 输入一个整数n,表示小明想要购买n(1≤n≤100)个橙子输出描述: 输出一个整数表示最少需要购买的袋数,如果不能买恰好n个橙子则输出-1示例输入 20输出 3【思路...原创 2019-04-06 16:27:59 · 239 阅读 · 0 评论 -
leetcode-top面试题 阶乘后的零
题目给定一个整数 n,返回 n! 结果尾数中零的数量。示例 1:输入: 3输出: 0解释: 3! = 6, 尾数中没有零。示例 2:输入: 5输出: 1解释: 5! = 120, 尾数中有 1 个零.来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes著作权归领扣网络所有。商...原创 2019-07-25 11:53:48 · 103 阅读 · 0 评论 -
【题27 二叉树的镜像】
【题27 二叉树的镜像】【题目】请完成一个函数,输入一棵二叉树,该函数输出它的镜像。镜像:特点:两棵树的根节点相同,但它们的左右两个子节点交换了位置,因此,不妨先在树中交换根节点的两个子节点。交换根节点的2个子节点之后,注意到10,6的节点的子节点仍然保持不变,还需要交换这两个节点的左右子节点。做完这两次交换之后,已经遍历完所有的非叶节点,此时交换之后的树,刚好就是原始树的镜像。...原创 2019-03-06 12:54:00 · 100 阅读 · 0 评论 -
拼多多2018——大整数相乘
【题目】有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述: 空格分隔的两个字符串,代表输入的两个大整数输出描述: 输入的乘积,用字符串表示示例1输入 72106547548473106236 982161082972751393输出 70820244829634538040848656466105986748packag...原创 2019-03-28 14:33:51 · 271 阅读 · 0 评论 -
leetcode-top面试题 打家劫舍
题目你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。示例 1:输入: [1,2,3,1]输出: 4解释: 偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3...原创 2019-07-25 11:37:47 · 141 阅读 · 0 评论 -
编程题——字符串价值
【题目】有一种有趣的字符串价值计算方式:统计字符串中每种字符出现的次数,然后求所有字符次数的平方和作为字符串的价值。例如: 字符串"abacaba",里面包括4个’a’,2个’b’,1个’c’,于是这个字符串的价值为4 * 4 + 2 * 2 + 1 * 1 = 21。牛牛有一个字符串s,并且允许你从s中移除最多k个字符,你的目标是让得到的字符串的价值最小。输入描述: 输入包括两行,第一行一个...原创 2019-04-08 17:37:19 · 713 阅读 · 0 评论 -
【题17 打印从1到最大的n位数】
【题17 打印从1到最大的n位数】【题目】输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1,2,3一直到最大的3位数999.<跳进陷阱>最容易想到的办法是先求出最大的n位数,然后用一个循环从1开始逐个打印。实现package ti17;public class Lianxi1 { //跳进面试官的陷阱: public static void...原创 2019-01-14 20:26:56 · 151 阅读 · 0 评论 -
【题18 删除链表的节点】
【题18 删除链表的节点】【题目一:在O(1)时间内删除链表节点】给定单向链表的头指针和一个节点指针:定义一个函数在O(1)时间内删除该节点分析:常规做法是从链表的头节点开始,顺序遍历查找要删除的节点。并在链表中删除该结点,想删除i,从a开始遍历。时间复杂度为O(n)之所以需要从头开始查找,是因为我们需要得到将被删除的节点的前一个节点。在单向链表中,节点中没有指向前一个节点的指针,所...原创 2019-01-15 12:00:48 · 150 阅读 · 0 评论 -
【题38 字符串的排列】
【题目】输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。【思路】...原创 2019-03-14 15:46:46 · 98 阅读 · 0 评论 -
【题49】 丑数
【题目】把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【思路】方法一一个数m是另一个数n的因子,是指m能被m整除,即n %m = 0。丑数只能被2,3,5整除.即如果一个数能被2整除,连续除以2;如果一个数能被3整除,连续除以3;如果一个数能被5整...原创 2019-03-17 09:59:16 · 113 阅读 · 0 评论 -
【题54】二叉搜索树的第k大节点
【题目】给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。【思路】考察树的中序排列【实现】/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public...原创 2019-03-21 18:51:28 · 88 阅读 · 0 评论 -
【题39】 数组中出现次数超过一半的数字
【题目】数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。【思路】解法一:特性:数组中有一个数字出现的次数超过了数组长度的一半。如果把这个数组排序,那么排序之后位于数组中间的数字一定就是那个出现次数超过数组一半的数字。即这个数字是统计...原创 2019-03-14 21:50:13 · 82 阅读 · 0 评论 -
【题55】 二叉树的深度 平衡二叉树
【题目】输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。【思路】如果一棵树只有一个节点,那么它的深度是1.如果根节点只有左子树没有右子树,左子树深度加1.如果根节点只有右子树没有左子树,右子树深度加1.如果既有左子树也有右子树,较大值加1.【代码】/**public class TreeNode { ...原创 2019-03-20 13:56:39 · 165 阅读 · 0 评论 -
算法面试题汇总_2求众数
题目:给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2思路:先sort排下序,然后取最中间的那个数因为定义的是个数大于数组长度的二分之一代码实现public class 求众数...原创 2019-07-13 11:13:20 · 318 阅读 · 0 评论 -
算法面试题汇总_1只出现一次的数字
题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4思路使用hashmap,遍历数组,将数字的值作为键,将数字出现的次数作为值,如果数字没有在hashmap中,添...原创 2019-07-13 10:39:46 · 240 阅读 · 0 评论 -
【题 42 连续子数组的最大和】
【题目】HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{1,-2,3,10,-4,7,2,5},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的...原创 2019-03-15 14:16:35 · 97 阅读 · 0 评论 -
【题 40】 最小k个数
【题目】输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。【思路】1 排序,位于前k个数为最小k个数 ----------------O(nlogn)2.如果基于数组的第k个数字来调整,则使得比第k个数组小的所有数字都位于数组的左边,比第k个数字大的所有数字都位于数组的右边,这样调整以后,位于数组中左边的k个数字就是...原创 2019-03-15 10:48:00 · 135 阅读 · 0 评论 -
【题20数值表示的字符串】
【题20数值表示的字符串】【题目】请实现一个函数用来判断字符串是否表示数值(包括整数和小数)例如:字符串“+100”,“5e2”,“-123”,“3.1416”及“-1E-16”都表示数值但是“12e”,“1a3.14”,“1.2.3”,“±5”及“12e5.4”都不是。分析:表示数值的字符串模式:A[.[B]][e|EC]或者.B[e|EC]如果一个数没有整数部分,它的小数部...原创 2019-01-16 09:53:19 · 86 阅读 · 0 评论 -
【题3数组中重复的数字】Java实现
【题3数组中重复的数字】【题目1】在一个长度为n的数组里的所有数字都在0-n-1的范围内,数组中某些数字是重复的,但不知道每个数字重复了几次,请找出数组中任意一个重复的数字,例如,如果输入长度为7的数组,{2,3,1,0,2,5,3},那么对应的输出是2或者3【方法】1.(1)先把输入数组排序(2)从头到尾扫描排序后的数组(3)排一个长度为n的数组需要O(nlogn)2哈希表(1...原创 2019-01-04 08:18:28 · 255 阅读 · 0 评论 -
【题9 用两个栈实现队列】Java实现
【题9 用两个栈实现队列】【题目】用两个栈实现队列,队列的声明如下:请实现它的两个函数appendTail和deleteHead分别完成在队列尾部插入节点和在队列头部删除节点的功能。[分析]插入:向栈stack1 中插入a元素,此时stack1中有元素{a},stack2为空。再像stack1中压入两个元素b和c,此时stack1有元素{a,b,c},c位于栈顶,stack2为空。如图a...原创 2019-01-07 20:29:59 · 169 阅读 · 0 评论 -
【题36 二叉搜索树与双向链表】
【题目】输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。【思路】【实现】//1、将左子树构成双链表,并返回该链表的头节点(左子树最左边的节点)//2、定位到左链表的最后一个节点(左子树最右边的节点)//3、如果左子树链表不为空,则将当前root追加到左子树链表后//4、将右子树构造成双向链表,并返回链表头结点(右子树...原创 2019-03-14 14:46:24 · 114 阅读 · 0 评论 -
leetcode-top面试题 位1的个数
题目编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:0000000000000000000000001000000...原创 2020-02-27 11:01:01 · 141 阅读 · 0 评论 -
【题35 复杂链表复制】
【题目】输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)【思路】【实现】/*public class RandomListNode { int label; RandomListNode next = nu...原创 2019-03-11 22:11:12 · 119 阅读 · 0 评论 -
【题 53】在排序数组中查找数字
【题目】统计一个数字在排序数组中出现的次数。【思路】用二分查找找到第一个k和最后一个k。【实现】public class Solution { public int GetNumberOfK(int [] array , int k) { int length = array.length; if(length == 0){ ...原创 2019-03-19 21:48:28 · 124 阅读 · 0 评论 -
【题12矩阵中的路径,13 机器人的运动范围】Java实现
回溯法:回溯法非常适合由多个步骤组成的问题,并且每个步骤都有多个选项。当我们在某一步选择了其中一个选项时,就进入了下一步,然后又面临新的选项。就这样重复选择,直至到达最终的状态。用回溯法解决的问题的所有选项可以形象地用树状表示。【题12矩阵中的路径,13 机器人的运动范围】【题12矩阵中的路径】【题目】请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径,路径...原创 2019-01-10 13:28:43 · 133 阅读 · 0 评论 -
【题32-2 分行从上到下打印二叉树】
【题目】从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。【思路】可以用一个队列来保存将要打印的节点,为了把二叉树的每一行单独打印到一行里,需要两个变量,一个变量表示在当前层还没有打印的节点数。一个表示下一层节点的数目。【实现】import java.util.ArrayList;import java.util.LinkedList;import java.util...原创 2019-03-25 20:28:53 · 128 阅读 · 0 评论 -
【题6 从尾到头打印链表】Java实现
【题6 从尾到头打印链表】【题目】输入一个链表的头节点,从头到尾反过来打印出每个结点的值。先问:是否允许修改输入的数据?解决方案一:栈首先遍历链表的节点后打印,典型的“后进先出”,可以使用栈来实现这种顺序。遍历时候,每个结点放入栈中。遍历完整链表后,从栈顶开始逐个输出结点的值解决方案二:递归栈的本质就是递归,直接使用递归的方式,打印一个节点的时候先打印它后面的节点,再打印该...原创 2019-01-05 08:45:37 · 907 阅读 · 1 评论 -
【题57】和为s的数字——和为s的连续正数序列
【题目】题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正...原创 2019-03-26 17:07:35 · 114 阅读 · 0 评论 -
【题32 从上到下打印二叉树】
【题32 从上到下打印二叉树】【题目】从上往下打印出二叉树的每个节点,同层节点从左至右打印。【思路如图】如果一个节点有左右子节点,先打印根节点,再将子节点保存,再打印。【实现】import java.util.ArrayList;import java.util.LinkedList;/**public class TreeNode { int val = 0; Tr...原创 2019-03-10 12:02:27 · 80 阅读 · 0 评论 -
【题2实现Singleton模式】Java实现
【题2实现Singleton模式】【题目】设计一个类,我们只能生成该类的一个实例(单例设计模式)【思路】不好的解法:1.只适用于单线程环境2.虽然再多线程环境中能工作但效率不高可行的解法:加同步锁前后2次判断实例是否已存在强烈推荐解法:1.利用静态构造函数2.实现按需创建实例【单例模式】单例模式定义:单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例...原创 2019-01-02 11:45:40 · 138 阅读 · 0 评论 -
leetcode-top面试题 计数质数
题目统计所有小于非负整数 n 的质数的数量。示例:输入: 10输出: 4解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。思路采用厄拉多塞筛法介绍:该算法在寻找素数时,采用了一种与众不同的方法:先将 2-N 的各数放入表中,然后在 2 的上面画一个圆圈,然后划去 2 的其他倍数;第一个既未画圈又没有被划去的数是 3,将它画圈,再划去 3 的其他倍数;现在既...原创 2019-07-24 13:59:34 · 125 阅读 · 0 评论 -
【题33 二叉搜索树的后序遍历】
【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。【思路】【实现】public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { if(sequence.length==0)ret...原创 2019-03-11 08:37:09 · 97 阅读 · 0 评论 -
【题57】和为s的数字——和为s的两个数字
【题目】输入一个递增排序的数组和一个数组s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一堆即可。例,{1,2,4,7,11,15} 和数字15 由于4+11 = 15 因此输出4 和11.【思路】因为数组排好序,选择两个数字,如果它们的和等于输入的s,就找到了如果它们的和小于输入的s,考虑选择较小数字的后面的数字如果它们的和大于输入的s,考虑选择...原创 2019-03-26 09:12:03 · 106 阅读 · 0 评论 -
拼多多2018——最大乘积java
【题目】给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)输入描述: 无序整数数组A[n]输出描述: 满足条件的最大乘积示例1输入 3 4 1 2输出 24【思路】三个数的最大乘积为:1.正数中的最大的三个数2.正数中最大的一个数 和 负数最小的两个数(负负得正)package nian2...原创 2019-03-27 09:08:43 · 175 阅读 · 0 评论