- 博客(81)
- 资源 (2)
- 收藏
- 关注
原创 Leetcode219 存在重复元素II
题目给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的绝对值最大为 k。方法:对于这个题目,感觉自己蠢到爆了,因为要找数字 A 的 k 范围内相等的数字,所以刚开始一直想的事A左边k个,右边k个,在两个k范围内找。然而可以对于每个nums[i] 都去看左边的k范围内是否存在相等的数即可。所有左...
2018-10-15 21:30:40 415 1
原创 Leetcode_448 找到所有数组中消失的数字
题目:给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次。找到所有在 [1, n] 范围之间没有出现在数组中的数字。您能在不使用额外空间且时间复杂度为O(n)的情况下完成这个任务吗? 你可以假定返回的数组不算在额外空间内。示例:输入:[4,3,2,7,8,2,3,1]思路一:开辟一个长度为n的空数组tem...
2018-10-08 10:59:22 348
原创 Leetcode113. Path Sum II
题目:找出从根节点到叶节点的路径中各节点值之和为sum的所有路径,并返回。思路:用数组nodeList保存从根节点到现在节点的 路径中的节点。再用flagList来保存每个节点的遍历情况,0表示对应的节点只遍历了左节点,1表示已经遍历了左节点和右节点,再一次过来就可以删除了。思路很简单,下面是代码。代码:/** * 5 * /
2016-09-02 14:38:18 429
原创 leetcode337. House Robber III
题目:对于一个二叉树,不能同时取某个分支上两端的两个节点,求能取得的最大的值。(这是题目大意)思路:对于一个二叉树,如果根据条件判断该二叉树根节点可以取,则传入参数true,如果某个二叉树的根节点不可以取,则传入false,当参数为true时,到底真正取与不去分两种情况,类似于0-1背包问题,然后返回那个结果比较大的情况。当参数为false,则根节点一定是不能取了,则返回(root.left,tr
2016-09-02 09:50:29 418
原创 leetcode229. Majority Element II
/** * 题目:如果数组数组中有一个数超过三分之一,则称为主数,现在寻找数组中的所有主数。 * @author hongbin.gao * 思路:原来有一道题目,主数的定义为超过二分之一的数,我们的思路是,将数组中的数两两一组(两个数不等),则最后余下的那个数可能是主数,如果题目说一定存在主数,那就不用检查了,如果不一定存在,则还需要检查一下。 * 现在我们采用相同的思路,将三个
2016-09-01 11:05:16 494
原创 leetcode90:Subsets II
题目:求数组的各种组合,数组中可能存在重复的数字,但是求出来的所有组合中不能有重复的组合。代码:import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * 题目:求一个数组nums的所有组合,nums中可能有重复的数字。但是求得的组合不能有相同的组合。 * 例如:nums = [1,
2016-08-26 10:46:48 447
原创 Leetcode39:Combination Sum
题目:给定一个整型数组candidates,和一个目标值target,使用数组中的数组成target,找出所有的组合。例如: candidates = {2,3,6,7}; target =7 ; 则返回的结果为:[[7],[2,2,3]] 。 题目说明,candidates中的数字全为正数,target也全为正数。 并且返回的结果中candidates中的数可以是重复的,而且不限次数的重复。但每
2016-08-25 10:41:34 692
原创 leetcode11:Container With Most Water
题目:给出一个非负整数数组,数组中的数代表一个栏杆,寻找两个栏杆和x轴形成一个水池,找出能装水最多的两个栏杆。 假如给出的例子是height = {1,2,3,4,5,6,7,8,9},则height[4]=5,height[8]=9,则形成的水池是(9-5)*5=20思路:先用两个指针,一个low一个hight,一个指向数组开头,一个指向数组结尾,则我们要找的两个栏杆肯定在这两
2016-08-24 16:03:00 364
原创 左旋转字符串
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。思路:本题,或许我们想出时间复杂度为O(n)、辅助内存空间为O(n)的方法和时间复杂度为O(n*
2016-08-15 17:58:36 1000
原创 把数组排成最小的数
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/25411174200952174133707/题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。思路:这个题目很
2016-08-15 17:39:15 678
原创 从尾到头输出链表
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/2541117420079237185699/题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值。思路:方法一:递归输出。 方法二:维护一个栈,先全部进栈,再依次出栈输出。 方法三:先将链表反
2016-08-12 15:10:24 476
原创 两链表的第一个公共结点
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/254111742008053169567/题目:两个单向链表,找出它们的第一个公共结点。思路:两个单向链表,如果存在公共节点,则两个链表会呈现 Y 形状,所以两个链表最后一个节点肯定是公共节点。可以找到两个链表的最后节
2016-08-12 12:19:15 432
原创 在字符串中删除特定的字符
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r
2016-08-12 10:43:31 3823
原创 寻找丑数
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/2541117420094245366965/题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1
2016-08-11 22:07:08 548
原创 输出1到最大的N位数
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛网易日志:http://zhedahht.blog.163.com/blog/static/2541117420094279426862/题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3,则输出1、2、3一直到最大的3位数即999。思路:首先直接用int或者long进行循环显然不切实际,如果
2016-08-11 20:05:26 739
原创 颠倒栈
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。何海涛日志:http://zhedahht.blog.163.com/blog/static/25411174200943182411790/题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。我的思路:要用递归颠倒一个栈,则我
2016-08-11 15:59:47 1423
原创 数组中出现次数超过一半的数字
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。思路:假设我们要找的这个数字为a,既然这个数字出现的次数超过了数组长度的一半,则其出现的次数超过了其他所有数字出现的次数之和。所以,如果随便拿一个数字a和另外一个数字抵消掉,最终数组中留下来的数字肯定是a,如果不是a和另外一个数字相抵消,那么最后留下来的
2016-08-09 19:22:06 781
原创 二叉树两结点的最低共同父结点
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。题目:输入二叉树中的两个结点,输出这两个结点在数中最低的共同父结点。思路:方法一:用递归 方法二:找到从根节点分别到达两个节点的路径链表,然后再查找两个链表离根节点最远的公共节点,即我们的结果。 两种方法思路都很清晰,所以不多做陈述,下面上代码.代码:/** * 题目:输入二叉树中的两个结点,输
2016-08-09 18:11:03 1066
原创 二元树中和为某一值的所有路径
声明:本片文章为阅读何海涛网易日志后,自己用java实现后的学习总结。题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。思路:先寻找从根节点到叶子节点的所有路径,将这些节点压进栈中,当遇到叶子节点时,判断sum是否为0,如果为0,则逆序输出栈中的节点的值,即为要求的输出。如果遇到的不是叶子节点,则先将左节
2016-08-05 17:30:23 451
原创 复杂链表的复制
声明:本篇文章是阅读了何海涛的日志后,自己用java 实现后的学习总结。题目:有一个复杂链表,其结点除了有一个Next指针指向下一个结点外,还有一个Sibling指向链表中的任一结点或者NULL。思路:方法一:第一遍先复制节点,复制next和val,后面再单独处理sibling,这个时间复杂度为O(n*n)方法二:将复制出来的节点穿插在原节点中间(对应何海涛日志的第三种方法)。然后用O
2016-08-04 20:27:55 667
原创 树的子结构
声明:本题是剑指offer中的一道题目,但是看了何海涛的日志,我的思路和他的思路有些不同。这里写下我自己思路和代码。题目:二叉树的结点定义如下。思路:判断root2是不是root1的子树,首先判断从root1开始的最上面的子树和root2是不是相同,如果相同,则返回true,如果不相同就判断root1.left和root1.right对应的子树是不是包含root2。所以代码分两个函数,
2016-08-04 11:34:21 416
原创 字符串组合
声明:本篇文章为学习何海涛的网易日志后,自己的学习总结。题目:输入一个字符串,输出该字符串中字符的所有组合。举个例子,如果输入abc,它的组合有a、b、c、ab、ac、bc、abc。思路:使用递归算法,假如我们要在low,high之间找长度为n的字符组合,当遇到low的字符,如果low位置的字符加入到组合时,只需要在low+1,high之间找到n-1位字符的组合,如果low位置的字符不
2016-08-03 15:51:58 627
原创 判断二叉树是不是平衡
声明:本文章是学习了何海涛的网易日志后自学习的总结。题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。思路:方法一:我们首先可以想到的就是递归,这个方法不多做阐述。class TreeNode{ int val; TreeNode left; TreeNode right; public
2016-08-02 21:38:01 409
原创 字符串的排列组合
本文是参考何海涛的博客第28题,自己进行学习的过程总结。题目:输入一个字符串,打出该字符串的所有排列组合,不考虑重复字符。思路:一般拿到这种题目,我们会自己写一个最简单的字符串abc,来进行排列组合,找出规律,我们会写出abc,acb,bac,bca,cab,cba。这六种,观察规律,我们会发现这六种排列组合,一组是以a开头,一组以b开头,一组以c开头,所以我们会想到递归,依次将a
2016-07-22 16:02:35 3032
原创 StringBuffer和StringBuilder编程遇到的问题
public class StrBuf {public static void main(String[] args){StringBuffer strBuf = new StringBuffer(3);strBuf.setCharAt(0, 'c');strBuf.setCharAt(1, 'c');strBuf.setCharAt(2, 'c');System.out.println(strB
2016-07-19 19:08:26 1486
原创 Leetcode 109. Convert Sorted List to Binary Search Tree
题目:将一个升序的单向链表,转换成平衡的二叉搜索树。旧思路:就像108题一样,我们一般做的是把数组转成二叉树,但是一个单向链表,我刚开始的思路是也像数组一样,就是每次找a[i]的时候,都要从表头开始找到第i个节点,但是这种思路显然很笨。新思路:这个是在网上看的别人的代码,虽然关键的代码只有七行,但是已经被原作者那强大的思维能力深深震撼了,虽然也是用的递归,但是递归我从来没这么用过。
2016-07-15 10:18:30 434
原创 二叉树非递归遍历
面试的时候可能会问到二叉树的非递归遍历。下面是自己写一些二叉树遍历的非递归的代码,仅供参考:二叉树节点:class TreeNode { //二叉树节点 int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}二叉树前序遍历非递归代码:public
2016-06-14 21:23:46 944
原创 设计模式--创建型(2)
四、Singleton(单例模式) 思想:在整个系统中,某类有且仅有一个实例。 代码:public class Singleton{ //静态私有成员变量 private static Singleton instance=null; private Singleton() { } public static Singleton getInstance()
2016-03-11 11:31:41 498
原创 leetcode137 Single Number II
题目:Given an array of integers, every element appears three times except for one. Find that single one.Note:Your algorithm should have a linear runtime complexity. Could you implement it wi
2015-11-19 21:40:29 515
原创 leetcode123 Best Time to Buy and Sell Stock III
题目:Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete at most two transactions.Note:
2015-11-06 21:43:37 1946
原创 leetcode122 Best Time to Buy and Sell Stock II
题目:Say you have an array for which the ith element is the price of a given stock on day i.Design an algorithm to find the maximum profit. You may complete as many transactions as you like (i
2015-11-06 19:18:28 590
原创 leetcode121 Best Time to Buy and Sell Stock
题目:Say you have an array for which the ith element is the price of a given stock on day i.If you were only permitted to complete at most one transaction (ie, buy one and sell one share of th
2015-11-06 16:57:30 447
原创 leetcode45 Jump Game II
题目:Given an array of non-negative integers, you are initially positioned at the first index of the array.Each element in the array represents your maximum jump length at that position.Yo
2015-11-06 14:47:05 386
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人