
LeetCode
文章平均质量分 57
wangzihahaha
AI,区块链,比特币,新金融,FinTech
展开
-
一道面试题
今天看了《剑指Offer》的面试题3,还是很有收获的。题目是一个二维数组,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 初看的时候,我也是看得云里雾里。但是当作者将思路引导了右上角的时候,顿时就有豁然开朗的感觉。正是因为每一行从左到右依次递增,每一行从上到下依次递增,这样的话,抓住右上角的数字与待查找数字进行比较,就相当于抓住了“牛鼻子”。若右上角数字等于待查找数字,...原创 2016-04-02 10:11:52 · 211 阅读 · 0 评论 -
leetcode之house Robber
这道题目刚看完的时候,很迷茫,好久都没有什么思路。因为我实在找不到切入点。要是说从1,3,5,7,9……,那还有2,4,6,8,10……当然除了这两种情况之外,还有1,3,6,10……情况就海了去了,所以我就陷入了迷茫。百度上搜这道题目,看到了一个博客名字叫做 陆草纯的博主,在他的博客里面做了较为详尽的分析,读后令我豁然开朗。原来这道题目考查的是动态规划!Dynamic Programming。之...原创 2016-04-05 20:05:22 · 233 阅读 · 0 评论 -
leetcode之Implement Queue using Stacks
C++标准里面对于栈,总共就给出了四种操作:入栈push,出栈pop,检查是否为空empty,返回栈的顶top。本题考查用栈的四种操作组合来实现队列queue的操作,可谓考查数据结构的基本功。解决方法之一是,使用两个栈,一个负责“进”,另一个负责“出”。难点是队列的出队操作,也就是pop,当负责“”的栈是空的时候同时负责进的栈非空,则此时先将负责“进”的栈的所有元素依次全部pop出来再依次全部pu...原创 2016-04-05 20:43:50 · 244 阅读 · 0 评论 -
leetcode之Balanced Binary Tree
采用递归思想,递归的结束条件尤其要注意。当左右子树的深度之差的绝对值>1,就一定不是平衡二叉树。注意的是,讲条件反过来说,左右子树的深度之差绝对值<=1,也不一定是平衡二叉树!!这一点要绝对注意!!(1)C++实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeN...原创 2016-04-05 21:51:01 · 212 阅读 · 0 评论 -
leetcode之Symmetric Tree
判断是不是对称树,用到递归思想就很方便。但是要注意递归结束的条件!(1)C语言实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ bool isMirror(st...原创 2016-04-07 22:03:02 · 197 阅读 · 0 评论 -
leetcode之Binary Tree Level Order Traversal II
昨天晚上参加微软的校招实习笔试,就没有来得及刷leetcode,也没有更新博客。这道题目其实考察的是递归思想和深度优先遍历。题目本身不难,但是细节不注意就会出错。附上C++代码:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNod...原创 2016-04-07 22:06:21 · 202 阅读 · 0 评论 -
leetcode之Remove Element
这道题目有两个考察点,一个是返回值是数组大小减去数组中等于val的数的个数;第二,将最后数组的前面的数字都得是不等于val的数字,虽然这个数组不用返回,但是也是程序验证的点。(1)C语言实现int removeElement(int* nums, int numsSize, int val) { int count = 0; for(int i=0;i<numsSize;i++)...原创 2016-04-08 09:40:14 · 242 阅读 · 0 评论 -
leetcode之 Remove Duplicate from Sorted Array
两个注意点:1.返回次数2.数组前面的数要是无重复的(1)C语言实现int removeDuplicates(int* nums, int numsSize) { int count = 0; for(int i=1;i<numsSize;i++){ if(nums[i]==nums[i-1]) count++; else ...原创 2016-04-10 11:23:37 · 318 阅读 · 0 评论 -
leetcode之Plus One
采用for循环,从个位数遍历判断数字是否是9,不是9的话直接加1后返回;是9的话要注意进位。(1)C++实现class Solution {public: vector<int> plusOne(vector<int>& digits) { int n = digits.size(); for (int i = n - 1; i >= 0; ...原创 2016-04-10 11:25:47 · 232 阅读 · 0 评论 -
leetcode之Pascal's Triangle
注意发现规律!C++实现class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> v(numRows); for(int i=0;i<numRows;i++){ v[i].res...原创 2016-04-10 11:27:02 · 195 阅读 · 0 评论 -
leetcode之Binary Tree Level Order Traverse
方法同上一篇博客的方法类似C++实现:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} *...原创 2016-04-10 11:28:10 · 526 阅读 · 0 评论 -
leetcode 之Factorial Trailing Zeroes
这道题用到的数字的知识。判断结果有多少个0,就是多少个10,而10=2×5,所以就是判断有min(2的个数,5的个数)。因为是求阶乘,只要有5,就意味着有4和2,所以2的个数是多于5个的,也就是说,5的个数决定了算出的结果有多少个0.(1)C语言实现int trailingZeroes(int n) { if(n==0) return 0; return n/5+trai...原创 2016-04-10 11:57:47 · 249 阅读 · 0 评论 -
leetcode之Pascal Triangle II
这道题我是这样做的,就是先将Pascal Triangle先建立出来,再根据形参返回相应的一行即可。当然,也有巧妙的办法直接建立并返回指定行的数据也是可以的。C++代码实现(两种解法)class Solution {public: vector<int> getRow(int rowIndex) { vector<int> vi(rowIndex ...原创 2016-04-10 16:50:40 · 241 阅读 · 0 评论 -
哈希表
哈希表几乎是最为重要的数据结构,主要用于基于“键(key)”的查找,存储的基本元素是键-值对(key-value pair)。index = Hash Function(key)value = Table【index】对于不同的键,哈希函数提供相同的存储地址时,哈希表就遇到了所谓的冲突(collision)。解决冲突的方式有链接法和开放地址法两种。简单来说,链接法相当于利用辅助数据结构(如链表),...翻译 2016-04-10 20:37:50 · 437 阅读 · 0 评论 -
leetcode之Swap Nodes in Pairs
看到这道题目竟然也可以使用递归,我的第一反应是很惊奇,此前都是用到了好几个指针,相互指来指去,稍不留意就会出错,很是麻烦。用到了递归之后就会变得很容易。这里给出递归的代码,代码量也一下子少了不少,当然牺牲了时间复杂度(1)C语言实现/** * Definition for singly-linked list. * struct ListNode { * int val; * st...原创 2016-04-05 12:08:00 · 475 阅读 · 0 评论 -
leetcode之Merge Two Sorted Lists
核心思路:递归思想,同时对边界条件进行判断。(1)C语言实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct...原创 2016-04-05 11:54:07 · 189 阅读 · 0 评论 -
leetcode之String to Integer
注意边界条件,比如滤掉空格,比如是否超出INT_MAX,是否小于INT_MIN,设置sign对整数的正负号进行区分,(1)C语言实现int myAtoi(char* str) { int i = 0; int sign = 1; int base = 0; while(str[i]==' '){ i++; } if(str[i]=='-'||str...原创 2016-04-05 11:39:48 · 216 阅读 · 0 评论 -
二维数组的查找
今天看了《剑指Offer》的面试题3,还是很有收获的。题目是一个二维数组,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。初看的时候,我也是看得云里雾里。但是当作者将思路引导了右上角的时候,顿时就有豁然开朗的感觉。正是因为每一行从左到右依次递增,每一行从上到下依次递增,这样的话,抓住右上角的数字与待查找数字进行比较,就相当于抓住了“牛鼻子”。若右上角数字等于待查找数字,那再...原创 2016-04-02 10:18:34 · 401 阅读 · 0 评论 -
leetcode之Number of 1 Bits
leetcode的这道题目,本质上考察的是二进制数与十进制数之间的转换,本题考的是十进制整数转换为二进制数。只有将十进制数转换到了二进制数以后,才有接下来的统计0的数目和统计1的数目。而将十进制数转换为二进制数,采用的是除二留余法。这个方法在高中的计算机课本上就已经讲过了,到了大一的《计算机技术基础》也有涉猎,到了大三的《微机原理》又讲了一遍。可以说,算法还是蛮好懂的。在代码实现方面,就是将整数直...原创 2016-04-02 11:12:41 · 260 阅读 · 0 评论 -
leetcode之Lowest Common Ancestor of a Binary Search Tree
题目是求二叉搜索树的最小公共父节点。首先想到的是能否采用递归的思想来处理?采用递归的思想来处理的话,就要考虑p,q两节点的位置问题。如果二叉搜索树本身为NULL,则返回值就是NULL。若p和q至少有一个指向的是二叉搜索树的根节点,则返回值就是根节点。若p和q分别位于二叉搜索树的根节点的两侧,则返回值依旧是根节点。若p和q均位于二叉搜索树的左半边或者右半边,这个时候才是采用递归思想的时候了。(1)C...原创 2016-04-02 11:24:05 · 213 阅读 · 0 评论 -
leetcode之Roman to Integer
此题考查罗马数字与整数的转换。做之前要去百度百科看一下罗马数字转换成整数的规则,这道题目就好办了。罗马数字中,I代表1,V代表5,X代表10,L代表50,C代表100, D代表500, M代表1000。一个很简单的处理办法是,将所给罗马数字从左至右依次相加,注意不要考虑进制问题。相加之后,再看是否有如下一些字母的组合:出现“IV”或“IX”,将所得结果减2;出现“XL”或“XC”,将所得结果减20...原创 2016-04-02 11:37:26 · 312 阅读 · 0 评论 -
leetcode之Odd Even Linked List
将链表的奇数、偶数分开处理,分别给奇数、偶数链表添加空表头。(1)C语言实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* oddEvenList(struct ListNode* head...原创 2016-04-03 16:52:16 · 247 阅读 · 0 评论 -
leetcode之Remove Duplicates from Sorted List
核心思想就是相邻元素逐个比较,遇到相等的就将排在后面的删除。(1)C语言实现/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* deleteDuplicates(struct ListNode*...原创 2016-04-03 16:54:31 · 205 阅读 · 0 评论 -
leetcode之C里面并Stairs
核心就是递归思想,将n=1,2,3的情况给出,接下来就交给递归,但是这样做会导致程序运行效率不高,运行结果超时。采用非递归思想的时候,实现起来稍微复杂一点,包括用几个变量依次完成累加和迭代功能。(1)C语言实现int climbStairs(int n) { if(n==1 || n==2 || n==3) return n; int prevprev = 2; i...原创 2016-04-03 16:57:32 · 261 阅读 · 0 评论 -
leetcode之Ugly Number
由题意知,Ugly Number指质因数只包含2,3,5这三个数字的数,故只要有出这三个之外的质因数的数字就不是Ugly Number.(1)C语言实现bool isUgly(int num) { if(num<=0) return false; while(num>=2){ if(num%2==0) num/=2; ...原创 2016-04-03 17:00:19 · 290 阅读 · 0 评论 -
leetcode之Happy Number
由题意知,Happy Number指的是将该数的各个位上的数字平方求和,如此循环往复,若最终所得数字为1,则为Happy Number。否则不是Happy Number。为防止陷入重复循环之中,需要有个避免重复循环的终止条件。实现起来就是用哈希表,一旦遇到非1的重复数字就立刻跳出循环终止。C++实现class Solution {public: bool isHappy(int n) { ...原创 2016-04-03 17:04:13 · 242 阅读 · 0 评论 -
leetcode之Power of Two
判断是不是2的幂次,有好几种方法,比如以二为底取log,比如依次除以二看能不能除到结果为1为止,比如n&(n-1)==0。(1)C语言实现bool isPowerOfTwo(int n) { if(n>0 && (n&(n-1)==0)) return true; else return ...原创 2016-04-03 17:11:26 · 254 阅读 · 0 评论 -
leetcode之Power of Three
道理同Power of Two.取对数是很巧妙的方法,来源于扎实的数学基础才能想出该巧妙的办法。(1)C语言实现bool isPowerOfThree(int n) { if(n<=0) return false; double n1 = log10(n)/log10(3); return n1-(int)n1==0;}(2)C++实现class Soluti...原创 2016-04-03 17:17:48 · 275 阅读 · 0 评论 -
leetcode之two sum
(Java实现)public class Solution { public int[] twoSum(int[] nums, int target) { int[] index; index = new int[2]; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<...原创 2016-04-04 22:55:02 · 219 阅读 · 0 评论 -
leetcode之reverse Integer
题目的难点在于溢出条件的判断,所以在对result声明的时候就得用long,而非int(1)C语言实现int reverse(int x) { long result = 0; int sign = x>0?1:-1; while(x){ int m = x%10; result = result*10+m; x /= 10; ...原创 2016-04-04 22:53:22 · 209 阅读 · 0 评论 -
使用哈希表
当遇到题目需要统计元素集中的元素出现的次数,直觉反应就是————哈希表,即std::unordered_map或std::map,键是元素值,值是出现的次数。特别的,有些题目仅需要判断元素出现与否,相当于判断值是0还是1,可以用bitvector,即bitset,利用一个bit表示当前下表是否有值。例题:判断一个字符串的所有字符是否都是唯一的这道题目关键在于“唯一”,一旦出现“唯一”就落入使用哈希...转载 2016-04-10 20:58:38 · 369 阅读 · 0 评论 -
给定两个字符串,判断他们是否是彼此可置换的
bool isPermutation(string stringA, string stringB){if(stringA.length()!=stringB.length()){ return false;}unordered_map<char,int> hashMapA;unordered_map<char,int> hashMapB;for(i...转载 2016-04-10 22:05:43 · 1219 阅读 · 1 评论 -
给定两个字符串newspaper和message,检查是否能够使用newspaper中的字母来组成message
分析什么情况下newspaper中的字符能组成message? 1。message中用到的字符必须都出现在newspaper中。 2。message中各个字符出现的次数一定少于其在newspaper中的出现次数。 一旦需要统计元素集中元素出现的次数,就应该想到哈希表。键key是字符,值value是该字符在newspaper中出现的次数。 So,若message用到的字符没有出现在哈希表中,...转载 2016-04-10 22:31:14 · 438 阅读 · 0 评论 -
leetcode Add Digits java语言实现
此题我专门查看了wiki 百科的相关论述,找到了一个通用公式,就解决了public class Solution { public int addDigits(int num) { return 1+(num-1)%9; }}原创 2016-03-28 10:12:46 · 233 阅读 · 0 评论 -
leetcode Add Digits 之C++实现
class Solution {public: int addDigits(int num) { return 1+(num-1)%9; }};原创 2016-03-28 10:15:08 · 288 阅读 · 0 评论 -
leetcode Add Digits 之C语言实现
刚开始刷leetcode,对于每道题目分别使用C,C++,java分别实现,因为它们的语法结构很类似,昔日都接触过。现将每一种语言的实现代码分别贴出来。int addDigits(int num) { return 1+(num-1)%9;}注意:查阅了wiki后得到了上述式子。...原创 2016-03-28 10:17:39 · 478 阅读 · 0 评论 -
leetcode Invert Binary Tree
将二叉树反转,可以考虑递归,也可以考虑非递归。用递归实现的话也就短短几句代码即可实现,比较好想,也比较好实现,这也是为什么这道题被定义为easy的等级。没试过非递归的解法,这里仅用递归解法的三种语言C,C++,java加以实现。(Java语言实现)/** * Definition for a binary tree node. * public class TreeNode { * int...原创 2016-03-29 19:23:58 · 226 阅读 · 0 评论 -
leetcode之 Move Zeros
核心思路:这道题就是用两个变量 i 和 j , i 从头到尾遍历一遍, j 遇到数组为 0 的值就停下来,等到 i 移动到第一个不是零的地方将该值复制给数组在 j 的位置上。附上C,C++和java三种语言的实现代码:(C语言实现)void moveZeroes(int* nums, int numsSize) { int j = 0; for(int i=0;i<numsSiz...原创 2016-03-29 19:29:29 · 338 阅读 · 0 评论 -
leetcode之delete Node in a Linked List
核心思路:函数的形参是一个指针,指向的就是要删除的点,即Node。说白了就是将该形参指针的值value和next分别用Node的下一个节点的value和next来代替即可。附上C,C++,java的实现代码:(C实现代码)/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ...原创 2016-03-29 19:32:58 · 252 阅读 · 0 评论 -
leetcode之Same Tree
考察的还是递归的算法和思想,注意递归前要有一些判断,既要有true,也要有false。(1)C代码/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */bool isSa...原创 2016-03-30 19:39:08 · 210 阅读 · 0 评论