代码改变世界

Balanced Binary Tree

2015-04-09 14:14 by 笨笨的老兔子, 102 阅读, 0 推荐, 收藏, 编辑
摘要:判断一棵二叉树是否是平衡树 看到二叉树的题目,基本都可以用递归的思想求解。对于判断是否是一棵平衡树可分为以下几个步骤: 计算左子树和右子树的高度差是否大于1,是则返回false 判断左子树是否是平衡树,判断右子树是否是平衡树 class Solution {public: bool isBalanced(TreeNode *root) { if (root == NU... 阅读全文

Best Time to Buy and Sell Stock II

2015-04-08 10:45 by 笨笨的老兔子, 129 阅读, 0 推荐, 收藏, 编辑
摘要:给定一个股票价格的时间序列,必须先买后卖,买之前必须卖出已有的,可以多次交易,求最大收益是多少 思路:假设三天内的价格为1 2 3,那第一天买入,第三天卖出收益最大,等价做法是第一天买入第二天卖出,第二天买入,第三天卖出。假设三天内价格为3 2 1,那就没有收益了。假设三天内的价格为2 1 3,第二天买入,第三天卖出。以上规律可以看出就是求出每一次的递增子序列的头和尾的差,也可以逐个求得即sum ... 阅读全文

Best Time to Buy and Sell Stock

2015-04-07 21:46 by 笨笨的老兔子, 200 阅读, 0 推荐, 收藏, 编辑
摘要:给定一个向量,该向量表示一只股票在第i天的价格,y要使得股票收益最大就应该在第i天买入,第i+n天卖出,求最大收益的值是多少 思路:用一个变量记录最小值,一个变量记录最大收益,从头到尾扫描一次价格,当扫描到第i天的价格时,如果这个价格比最小值小,则替换,如果比最小值大,则计算此刻的收益是否大于最大收益,大于则替换,否则继续。 class Solution {public: int maxPr... 阅读全文

Linked List Cycle II

2015-04-07 15:59 by 笨笨的老兔子, 151 阅读, 0 推荐, 收藏, 编辑
摘要:给定一个链表,如果该链表有环,请返回环的起点,否则返回NULL 思路:一个FAST每次前进两步和一个SLOW每次前进一步,当两个指针相等的时候,其中一个回到head,然后两个同时往前走,再次相遇时的位置就是环的起点证明:假设第一次相遇时,SLOW走了M步,FAST走了2M步,环的长度是L,相遇点距离环的起点为K,则此时FAST回到起点,距离环的起点为M-K,SLOW距离环的起点为L-K,当FAST... 阅读全文

Linked List Cycle

2015-04-07 13:29 by 笨笨的老兔子, 138 阅读, 0 推荐, 收藏, 编辑
摘要:给定一个链表,判断是否存在环 思路:龟兔赛跑,一个指针兔跑得快,一个指针龟跑得慢,如果有环兔子一定会遇到乌龟(fast == slow),如果没有环兔子一定能到达终点(fast == null) class Solution {public: bool hasCycle(ListNode *head) { if (head) { ListNo... 阅读全文

Min Stack

2015-04-07 13:08 by 笨笨的老兔子, 157 阅读, 0 推荐, 收藏, 编辑
摘要:设计一个最小堆,要求实现push、pop、top、getMin几个功能。 思路:主要问题在于getMin,必须是一个常数级的查找返回,因此最好是每push一个就和当前min进行比较,始终保存min。 class MinStack {public: MinStack() { head = new ListNode(INT_MAX); } void push(in... 阅读全文

Gas Station

2015-04-03 15:54 by 笨笨的老兔子, 211 阅读, 0 推荐, 收藏, 编辑
摘要:有两个向量,一个向量存着gas,gas[i]代表在i点能够获得的gas,另外一个向量存着cost代表从i到i+1(注意循环)需要消耗的gas,希望找个一个地点i,从这个地点i开始能够跑完整个向量,如果不能跑完则返回-1。思路:设定两个指针start和end,start指向向量尾部,end指向向量头部,设定一个sum记录当前的gas净开销。如果sum>=0,说明可以往前走,则end++,然后sum加... 阅读全文

Find Minimum in Rotated Sorted Array

2015-04-02 10:33 by 笨笨的老兔子, 133 阅读, 0 推荐, 收藏, 编辑
摘要:一个有序数组被切成两段之后进行了交换得到一个新数组,求新数组中最小的数字 (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).思路:根据mid的大小就可以选择到底是head=mid还是tail=mid class Solution {public: int findMin(vector &num) { int head = 0, t... 阅读全文

Single Numberl

2015-04-01 14:14 by 笨笨的老兔子, 128 阅读, 0 推荐, 收藏, 编辑
摘要:存在一个数组,该数组中仅有一个数仅出现了一次,其他所有数均出现两次,求这个数 思路:任何一个数和自身求异或操作都是0,任何一个数和0求异或操作都是它自身 class Solution {public: int singleNumber(int A[], int n) { int res=0; for (int i = 0; i < n; i++) ... 阅读全文

Sum Root to Leaf Numbers

2015-04-01 13:58 by 笨笨的老兔子, 169 阅读, 0 推荐, 收藏, 编辑
摘要:一个二叉树从根到叶子组成一个数字,求所有数字的和 例子: 1/ \2 3有两个数字,12和13,和即25用递归方法,每到叶子节点即返回,逐层将结果返回即可 class Solution {public: int sumNumbers(TreeNode *root) { int sum = 0; sum = sumTree(root,sum); re... 阅读全文