[LeetCode]Easy合集I

感觉像之前那样一题记录一次,太浪费网络资源了,所以后面的我都会做成合集,一个合集大概20题的样子,代码只放在github上面这里只记录题意和解法.这样应该可以节约不少网络资源了吧…

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=dpi1,j+dpi1,j1 ,杨辉三角的定义便是如此
  • Code

Pascal’s Triangle II

  • 题意: 杨辉三角#2版,这次只需要返回第k行就可以了,不过题目限制了只能用 O(k) 的空间复杂度.
  • 解法: 这题考的是杨辉三角的性质,杨辉三角的第k行,从左到右可以看着是组合数 Cik,0ik ,注意这里k行有k+1个,也就是说从第0行开始数的,因为组合数是对称的,所以只需要求一半即可(左右赋值),对于第i个组合数有 Cik=kij=kjij=1j ,这里可以用双重循环求得分子和分母,不过这肯定不太好,时间太浪费,因为我们是从左到右开始求的,所以,第i个的分子可以是前一个分子乘 ki ,分母是前一个分母乘以 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;
    }

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值