`
文章列表
这篇文章列出了leetcode中有关二叉树遍历的题目,之前在二叉树的深搜和广搜中介绍过,这里再重复一下,因为这都是最基本的操作,需要我们熟练掌握。 1,Binary Tree Level Order Traversal 二叉树的广度优先搜索,输出所有节点的值 ...
与数组和链表相比,树的题目比它们要难一些,我们往往通过递归来处理树的题目,下面是对leetcode有关树操作的几道题目,包括找出树的所有路径,计算完全二叉树节点个数,二叉搜索树的最近公共祖先,普通二叉树的最近公共祖先。 1,Binary Tree Paths 给定一个二叉树,输出所有根节点到叶子节点的路径。 用深度优先遍历(DFS),依次保留搜索过的节点。代码如下: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; ...
这篇文章介绍通过位运算求解子集,反转二进制数,判断是否为2的幂等。 1,Number of 1 Bits 给定一个无符号的整数,输出它包含1的个数。 通过右移,依次与1位与,得到1的个数。 代码如下: public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; for(int i = 0; i < 32; i++) { if((n ...
在位运算这篇文章中已经介绍了关于位运算的一些知识,这里主要介绍leetcode中出现的有关位运算的题目。 有关找单独元素的有三道题,要求空间复杂度为O(n),空间复杂度为O(1),我们都可以通过位运算来解决。 1,Single Number 给 ...
这篇文章总结leetcode中有关括号的问题,最简单的是判断输入的括号是否有效,例如“))”就不属于有效的括号,括号的题目无非是添加,删除,找到最长有效括号等。最长有效括号是一道DP问题,我们在DP总结中结合最长回文子串一起列出。下面列举几个基本的题目。 1,Valid Parentheses 给定一个字符串序列,它包含'(', ')', '{', '}', '[' , ']',判断字符串是否是有效括号组成的。 例如:"()" 和 "()[]{}" 是有效字符串;而 "(]" 和 "([)]" 就不是合法字符串。 ...
这篇文章总结leetcode中回文的题目,其中关于palindrome partition有两道题目,第二道属于动态规划的题目,我们动态规划的总结中讨论。简单的讲回文就是将它翻转后和原来一样。 1,Palindrome Number 给定一个数字,判断它是否为回文 ...
java中的垃圾回收机制(Garbage Collection )可以自动清除在堆中不用的对象,为java程序员提供了方便,在c/c++中,我们就需要手动去释放堆中的内存。 在java中对象都是通过引用来使用的,如果没有引用指向这个对象,那么这个对象就 ...
之前在一篇文章里总结了一部分链表的题目,这里主要例举一下链表去重的问题。链表去重有很多种情况,有些要求我们只保留单独出现的元素,有些要求我们使重复的元素只能出现一次。对于可能会删除头结点的题目,我们一般采用新建一个helper节点,使helper指向head,进行操作,最后返回helper.next就可以了。下面是leetcode中有关链表去重的一些题目 1,Remove Duplicates from Sorted List 给定一个链表,去除重复的元素,使每个元素最多出现一次。 例如:给定 1->1->2, 返回 1->2. 给定 1->1->2->3- ...
给定一个数组,判断是否存在重复元素,或者让你找出重复的元素。遇到这类问题我们应该先想用哈希表,位运算,双指针是否可以解决,根据具体的情况选择合适的方法。下面是leetcode中有关数组去重或查重的几道题目。 1,Contains Duplicate 给定一个数组,判断里面是否存在重复元素,如果存在就返回true,如果不存在就返回false. 既然是判断是否存在重复元素,我们首先想到哈希表,遍历数组,存在重复元素直接return true;不重复的元素依次加入表中,直到结束。代码如下: public class Solution { public boolean contains ...
有关排列的问题我们可以与组合比较来考虑,解决这类问题我们都采用回溯法,在组合中不用考虑顺序,而在排列中就要考虑顺序,例如(1,2,3)和(2,1,3),在组合的概念中是相等的,但它们是不同的排列。下面列举leetcod ...
关于组合的题目我们一般用回溯法来解决。我的理解回溯法就是按照要求一直找下去,如果找到一个结果就把这个结果记录下来,然后返回上一层,如果有其它路线可以走就继续尝试,如果没有,就继续返回上一层。回溯的实现一般用递归来完成。这里介绍一下关于组合的问题,以及它的一些延伸。 1,Combination 给定两个正整数n和k,返回所有长度为k的组合,组合中的元素为1...n。 例如:n = 4, k = 2 输出: [   [2,4],   [3,4],   [2,3],   [1,2],   [1,3],   [1,4], ] 很明显我们要用链表来记录结果,通过链表的大小来判断是否继续找下去,如果链表 ...
2sum, 3sum, 4sum和3sum closest是四道类似的题目,后面三个都是2sum的延伸。 1,2sum 给定一个数组numbers[]和一个目标数值target,从数组中找到两个元素,使它们的和等于目标元素。返回这两个值的索引indices,并且index1 大于index2。(假设只有一个结果) 例如:输入: numbers={2, 7, 11, 15}, target=9            输出: index1=1, index2=2 (不是zero-based) 我们用hash来实现这道题,key中存放数组里面元素的值number[i], value中存放对应的下 ...
前面讲到了如何用数组以及链表实现一个基本的堆栈和队列,这篇文章介绍如何实现一个可以在O(1)时间复杂度下得到最小元素的堆栈,以及用堆栈实现一个队列,用队列实现一个堆栈。 1,实现一个可以得到最小元素的堆栈, 要求pop(),push(),getMin()的时间复杂度都为O(1). 如果我们按照普通的思路,类中有两个成员变量,value和minValue,当pop一个元素后,我们就需要更新minValue, 从而要遍历堆栈里剩余的元素,时间复杂度为O(n),假设堆栈中有n个元素,因此这个方法不符合题意。 我们想到用每个元素都记录当前的最小元素,当push一个新的元素进来,这个新的元素连同最小 ...
链表总结 链表也是计算机中一个重要的数据结构,有单向链表,双向链表等。和数组一样都是一种线性存储结构,但是它不能像数组那样通过下标查找数据,我们必须要知道链表的头结点,然后依次遍历来查找结果,在这一点上 ...
MongoDB Mac上使用MongoDB的方法。 官网下载安装包,安装完毕后,如果是默认路径,就在根目录下创建一个data文件夹,存放数据库中的数据。 开启MongoDB服务:在terminal中,切换到bin目录下执行./mongod就开启了MongoDB服务 连接数据库:新创建一个terminal窗口,在bin目录下执行./mongo,这是默认链接到test 退出数据库:用control + c 或者“>exit” 与数据库断开链接,这时服务器还是开启状态 关闭服务:首先切换到admin,然后执行db.shutdownServer(),这样就关闭了MongoDB服务 Mon ...
Global site tag (gtag.js) - Google Analytics