![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程题目
xuebaobao130526
这个作者很懒,什么都没留下…
展开
-
151. 翻转字符串里的单词
无空格字符构成一个单词。输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。class Solution { public String reverseWords(String s) { if(s == null) { return null; ...原创 2020-03-11 11:24:27 · 157 阅读 · 0 评论 -
二叉树广度优先遍历(层次遍历)
宽度优先遍历,广度度优先遍历,层次遍历。 即从根节点开始依次遍历左子节点和右子节点,直到所有子节点都变遍历完为止。遍历结果:{1,2,3,4,5,6,7,8,9,10 }leetcode练习:思路:将树上顶点按照层次依次放入队列结构中,队列中元素满足 FIFO(先进先出)的原则。初始化队列只包含一个节点 root 和层次编号 0 : level = 0。当队列非空的...原创 2020-03-11 10:32:51 · 1821 阅读 · 0 评论 -
二叉树深度优先遍历
深度优先遍历(Depth First Search),简称DFS,其原则是,沿着一条路径一直找到最深的那个节点,当没有子节点的时候,返回上一级节点,寻找其另外的子节点,继续向下遍历,没有就向上返回一级,直到所有的节点都被遍历到,每个节点只能访问一次。栈(Stack),先入后出。例如:二叉树的先序遍历(深度优先搜索实现)首先将根节点1压入栈中【1】 将1节点弹出,找到1的两个子节点3...原创 2020-03-11 10:29:00 · 465 阅读 · 0 评论 -
二叉树的直径
解题思路:递归遍历,路径长度等于经过的节点个数减1(中间线的条数)。每个节点有两种选择,要么是作为中间节点,加入到别的路径;要么是作为根结点,形成新的路径。(注意,题目要求,路径不一定要穿过根结点)。维护一个最优解,在每遍历到一个节点的时候,确定是否更新当前路径的最大长度。class Solution { int max = 0; public int diamete...原创 2020-03-11 10:25:28 · 133 阅读 · 0 评论 -
二叉树前序后续遍历递归非递归实现-牛客网
前序遍历:顺序为根左右递归实现:当节点不为空时,每次遍历现将节点值添加进list,之后,左子树补空,遍历左子树;右指数不空,遍历右子树;最终返回list。需要注意的是根节点为空的情况,在遍历之前,根节点为空,直接返回(全局)list。public class Solution { ArrayList<Integer> list = new ArrayList<>()...原创 2018-04-25 20:03:56 · 618 阅读 · 1 评论 -
只出现一次的数字
1.一个整型数组,有一个数字出现一次,其余数字出现两次,找出这个只出现一次的数字。解题思路:异或运算性质(两个相同的数字异或得0,0与一个数字异或得数字本身,而且异或运算是满足交换律的)数组元素按位异或,(交换律可以想象成相同的数字参与运算的时候是相邻的)所有出现两次的数字异或之后得0,最后剩余的是0与出现一次的数字异或,所以最后的结果就是出现一次的数字2.一个整型数组,其他数字出现三次,只有一个...翻译 2018-04-02 17:14:15 · 128 阅读 · 0 评论 -
连续子数组最大和
求一个数组的连续的子数组的最大和。例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。思路:对于每个元素,有两种可能,一是加入到原来的子数组成为新的一员;二是自己成为新子数组的开头,这两种情况应该怎样判断呢:如果当前元素加入到子序列中,求和的结果比自己的值还小,那么就自己成为新子序列的开头(即当前和为负数)。如果加到子序列中成为一员所得的和比自己...原创 2018-03-12 22:18:42 · 126 阅读 · 0 评论 -
字符串的全排列
输入一个字符串,如abc,按字典顺序输出其排列:abc, acb, bac, bca, cab, cba注意,字符串中可能有重复的字母。解题思路:将字符串看成两部分,第一部分是第一个字符,第二部分是后面剩余的字符串,全排列可以分两步来求:求可能出现在第一个位置的字符:把当前第一个字符和后面的字符进行交换固定第一个字符,求该字符后面的字符串的全排列。那么,如何求全排列呢?可以利用递归思想,把后面的字...原创 2018-03-10 13:17:44 · 201 阅读 · 0 评论 -
斐波那契数列
数列:1,1,2,3,5,8...有以下规律:n<2时,f(n)=1;n>=2时,f(n)=f(n-1)+f(n-2);方法1:递归实现;public long f( int n ) { return n<2 ? 1 : f(n-1)+f(n-2);}方法二:循环(有重复计算)public long long f( int n ) { long [ ] a = new...原创 2018-03-09 22:45:24 · 135 阅读 · 0 评论 -
最小公倍数
求a与b的最小公倍数。首先求得ab的最大公约数c,最小公倍数为a*b/c。原理: a=a1*a2*...*an*c b= b1*b2*...*bn*c 因为c是最大公约数,因此其他的因子不可能和c相同。ab的最小公倍数必须保证有两个数各自的因子。而a*b多层了一个c,因此除以一个c即可。...原创 2018-03-14 20:59:28 · 525 阅读 · 0 评论 -
最大公约数
欧几里得算法(辗转相除法):首先给定两个数a,b(a>b),则根据除法运算,a/b=q......r。q是商,r是余数。也可以表示为a=bq+r。下面给出一个定理: 若a=bq+r,则(a,b)=(b,r),即a,b的最大公约数等于b,r的最大公约数。因此,可以用辗转相除法,求得a b的最大公约数。如: a/b = q + r. r = a % b.ab的最大公约数等于br(...原创 2018-03-14 20:26:57 · 498 阅读 · 0 评论