[LeetCode]Easy合集I
2015-12-27 18:39
323 查看
感觉像之前那样一题记录一次,太浪费网络资源了,所以后面的我都会做成合集,一个合集大概20题的样子,代码只放在github上面这里只记录题意和解法.这样应该可以节约不少网络资源了吧…
解法:倒着过来存比较好处理,枚举数组1的值x,把数组2大于等于x的值加到数组1的后面,然后再把x加到后面。
Code
解法:暴力即可,递归下去看节点如果都为空返回
Code
解法:首先如果给的树为空,返回
Code
解法:中序递归下去,加个参数表示层级,然后在这层级
Code
解法:递归下去,如果参数为空,返回0,否则是std::max(左子树深度,右子树深度)+1.最后返回的结果就是最大深度.
Code
解法: 上面的代码,后面加个reverse()就好了.
Code
解法: 对于每个节点,把左右子树的最大深度求出来,看差的绝对值是不是小于2,如果某个节点不满足,就是不平衡的.
Code
解法:坑,叶子节点必须得左右子树都为空跪了几发才反应过来。解法就是直接dfs下去,走一个节点就把sum减去节点的值,最后遇到叶子节点的时候判断一下sum是不是0.
Code
解法:双重循环暴力,可以当是简单递推,递推方程式为dpi,j=dpi−1,j+dpi−1,j−1,杨辉三角的定义便是如此
Code
解法: 这题考的是杨辉三角的性质,杨辉三角的第k行,从左到右可以看着是组合数Cik,0≤i≤k,注意这里k行有k+1个,也就是说从第0行开始数的,因为组合数是对称的,所以只需要求一半即可(左右赋值),对于第i个组合数有Cik=∏k−ij=kj∏ij=1j,这里可以用双重循环求得分子和分母,不过这肯定不太好,时间太浪费,因为我们是从左到右开始求的,所以,第i个的分子可以是前一个分子乘k−i,分母是前一个分母乘以i,所以可以在O(1)的时间算出来分子分母.注意在过程中可以求一下gcd约分。
Code
解法:暴力,定义两个变量l,r,表示左边和右边的目标值,在比较s[l]和s[r]之前,循环去掉非比较对象的字符, 比较的时候要无视大小写,所以判断
Code
解法:栈的实现就有
Code
解法:就暴力去找两个串的每个值拿出来比较,找的时候为了通用,可以写个函数来取值省去判断两个串长短,像下面这样
Code
解法: 在很久很久之前大一暑假集训的时候写过这个,当时用了很复杂的组合数学什么的..现在想看来当时好蠢2333,这题就是把一个整数换成26进制,值为’A’~’Z’,十进制换26进制的方法跟二进制差不多,一直往下除直到为0,不过这里比较特殊,因为是1到26,不是0到25,所以除的时候要减1再除.
Code
解法:最简单直接的方法就是排个序,然后把中间那个数返回,复杂度为O(nlogn),不过这种方法的话,顺序就乱了,网上有种O(n)的方法而且不用打乱顺序,大概是说计数,开始计数为0,循环的时候如果计数为0,则result为当前值(如果为0,前面的数说明最坏的情况是有两个数分别出现了k次那么前面的都不会是答案,这个才有可能是答案,下一个值如果和result不等,计数减一,相等加一..
Code
这个更简单,就是求一下把26进制转换成整数,注意是从1开始.
Code
解法:说来尴尬,多年前就遇到过这个问题,不知道怎么解,只知道有个公式,一直除五。现在,依然不会,还是要去网上搜
Code
解法:这题去年被枭哥问过..我虽然当时也是想了个O(n)的算法,不过实现后看起来相对比较麻烦,一个比较优秀的方法是先反转前面m个数,再反转后面n-m个数,最后集体再反转一次。复杂度也是O(n)。代码看起来就机智多了,orz…
Code
解法:前面有一个十进制反转的,这个就差不多一样了,前面那个一直除10,这个一直除2就是了.PS:食用位运算,味道更佳.
Code
Merge Sorted Array
题意:给长度为m数组1和长度为n的数组2,都是有序的,要求合成一个数组而且是有序的。(数组1的长度大于等于n+m)解法:倒着过来存比较好处理,枚举数组1的值x,把数组2大于等于x的值加到数组1的后面,然后再把x加到后面。
Code
Same Tree
题意:给两棵二叉数,判断是不是完全一样的.解法:暴力即可,递归下去看节点如果都为空返回
true,一个为空,返回
false,值不相等,返回
false,左右再递归
Code
Symmetric Tree
题意:给一棵二叉树,看是不是轴对称的解法:首先如果给的树为空,返回
true.否则就左右同时递归下去看值是否相等.PS:一开始我居然愚蠢地用了先序和后序遍历看是不是全部值相等,发现结论并不对,跪在了{1,2,3,3,#,2}.后来改了同时递归才ac.鶸.
Code
Binary Tree Level Order Traversal
题意:给一棵二叉树,把同一级的放在一块,然后整体返回.解法:中序递归下去,加个参数表示层级,然后在这层级
push_back这个值即可。
Code
Maximum Depth of Binary Tree
题意:给一棵二叉树, 求深度.解法:递归下去,如果参数为空,返回0,否则是std::max(左子树深度,右子树深度)+1.最后返回的结果就是最大深度.
Code
Binary Tree Level Order Traversal II
题意: 和上面这题差不多,就是顺序深度颠倒过来.解法: 上面的代码,后面加个reverse()就好了.
Code
Balanced Binary Tree
题意:判断一棵二叉树,是不是平衡二叉树解法: 对于每个节点,把左右子树的最大深度求出来,看差的绝对值是不是小于2,如果某个节点不满足,就是不平衡的.
Code
Path Sum
题意: 给一棵二叉树,总是否存在一条路径(从根节点到叶子节点)的和是给定的值sum解法:坑,叶子节点必须得左右子树都为空跪了几发才反应过来。解法就是直接dfs下去,走一个节点就把sum减去节点的值,最后遇到叶子节点的时候判断一下sum是不是0.
Code
Pascal’s Triangle
题意: 求杨辉三角解法:双重循环暴力,可以当是简单递推,递推方程式为dpi,j=dpi−1,j+dpi−1,j−1,杨辉三角的定义便是如此
Code
Pascal’s Triangle II
题意: 杨辉三角#2版,这次只需要返回第k行就可以了,不过题目限制了只能用O(k)的空间复杂度.解法: 这题考的是杨辉三角的性质,杨辉三角的第k行,从左到右可以看着是组合数Cik,0≤i≤k,注意这里k行有k+1个,也就是说从第0行开始数的,因为组合数是对称的,所以只需要求一半即可(左右赋值),对于第i个组合数有Cik=∏k−ij=kj∏ij=1j,这里可以用双重循环求得分子和分母,不过这肯定不太好,时间太浪费,因为我们是从左到右开始求的,所以,第i个的分子可以是前一个分子乘k−i,分母是前一个分母乘以i,所以可以在O(1)的时间算出来分子分母.注意在过程中可以求一下gcd约分。
Code
Valid Palindrome
题意: 给一串字符,去掉其中的非字母和非数字同时不管大小写,看是不是回文串.解法:暴力,定义两个变量l,r,表示左边和右边的目标值,在比较s[l]和s[r]之前,循环去掉非比较对象的字符, 比较的时候要无视大小写,所以判断
s[l-'A']%32==s[r-'A']%32即可(32是由于’A’到’a’之间的差为32.
Code
Min Stack
题意:实现栈,并且快速找到最小值。解法:栈的实现就有
std::stack<int>即可,快速找到最小值的方法是再维护一个单调递减的栈
minStack,这样就要吧在O(1)的时间内得到最小值了,维护的时候就在
push普通栈的时候看是不是小于等于
minStack.top(),如果是就加入栈,在
pop的时候看是不是等于
minStack.top()如果是,就
minStack也要
pop一下.
Code
Compare Version Numbers
题意:比较两个版本大小.解法:就暴力去找两个串的每个值拿出来比较,找的时候为了通用,可以写个函数来取值省去判断两个串长短,像下面这样
int getIntInVersion(const string& kVersion, int& iStartPos) { int iResult = 0, i; for (i = iStartPos; i < (int)kVersion.size() && isdigit(kVersion[i]); ++i) { iResult = (iResult << 1) + (iResult << 3) + kVersion[i] - '0'; } return iStartPos = i + 1, iResult; }
Code
Excel Sheet Column Title
题意: Excel表的行表示.解法: 在很久很久之前大一暑假集训的时候写过这个,当时用了很复杂的组合数学什么的..现在想看来当时好蠢2333,这题就是把一个整数换成26进制,值为’A’~’Z’,十进制换26进制的方法跟二进制差不多,一直往下除直到为0,不过这里比较特殊,因为是1到26,不是0到25,所以除的时候要减1再除.
Code
Majority Element
题意: 给n个数,其中有个数出现的次数超过了一半,请找出这数.解法:最简单直接的方法就是排个序,然后把中间那个数返回,复杂度为O(nlogn),不过这种方法的话,顺序就乱了,网上有种O(n)的方法而且不用打乱顺序,大概是说计数,开始计数为0,循环的时候如果计数为0,则result为当前值(如果为0,前面的数说明最坏的情况是有两个数分别出现了k次那么前面的都不会是答案,这个才有可能是答案,下一个值如果和result不等,计数减一,相等加一..
Code
Excel Sheet Column Number
题意:和前面那题刚好相反,这题要求给出ABCD表示的列,算出是第几列。这个更简单,就是求一下把26进制转换成整数,注意是从1开始.
Code
Factorial Trailing Zeroes
题意:求n的阶乘,末尾有几个0。解法:说来尴尬,多年前就遇到过这个问题,不知道怎么解,只知道有个公式,一直除五。现在,依然不会,还是要去网上搜
阶乘末尾的0,才能看懂。
Code
Rotate Array
题意:反转一个数组,把前面m个数,拿到后面去.解法:这题去年被枭哥问过..我虽然当时也是想了个O(n)的算法,不过实现后看起来相对比较麻烦,一个比较优秀的方法是先反转前面m个数,再反转后面n-m个数,最后集体再反转一次。复杂度也是O(n)。代码看起来就机智多了,orz…
Code
Reverse Bits
题意:给一个无符号整n,要求把二进制反转返回。解法:前面有一个十进制反转的,这个就差不多一样了,前面那个一直除10,这个一直除2就是了.PS:食用位运算,味道更佳.
Code
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解