leetcode
文章平均质量分 70
密函一封
可以不断进步乃人生一大幸事!
展开
-
344. Reverse String
class Solution {public: string reverseString(string s) { string temp; for(int i=0;i<s.size();i++){ temp.insert((std::string::size_type)0,1,s[i]); } ret原创 2016-04-27 21:37:34 · 252 阅读 · 0 评论 -
335. Self Crossing(C++实现)
不穿过自己的两种情况图:很郁闷的一个题啊!本来想的很简单,不相交的情况就两种:矩形一直外扩或者一直内缩。上手写的时候竟然写了很久很久,思维陷在判断语句里,把自己堵死了!最后参考了网友的写法!超级简单!其实基本思想一模一样的啊,但是我的编程功力真的差了好远……原创 2016-05-12 21:08:45 · 646 阅读 · 0 评论 -
332. Reconstruct Itinerary(C++实现)
算法思想: 将所有的机票用map保存,map<string,multimap<string>>,将val用multimap<string>保存,可以保存当前出发地能到达的所有的目的地。并且由于multimap会自动排序,最后得到的结果必定满足字典序最小.利用DFS思想,用栈做中介,首先将"JFK"入栈,搜索map,将当前搜索的string入栈,直到map为空。开始从stack中取出string,加到结果res中。原创 2016-05-13 10:56:21 · 955 阅读 · 0 评论 -
331. Verify Preorder Serialization of a Binary Tree(C++实现)
算法思想一:(二叉树中所有节点的出度=入度) 根结点有2出度0入度,分支结点有2出度1入度,空结点有0出度1入度。遍历序列,判断出度是否等于入度!记 K=出度-入度。如果序列化是正确的,那么 K 在任何时刻都不会小于0,并且最终结果等于0!算法思想二: 遍历字符串,如果碰到连续的“数字,#,#”,就将其替换为一个“#”入栈,最后字符串若仅剩一个‘#’就是true。程序中: 首先将a=“3,#,#,2,#,#”变成A=“1##1##” 形式。利用栈(Stack)数据结构实现上述算法。原创 2016-05-13 13:39:20 · 382 阅读 · 0 评论 -
347. Top K Frequent Elements (C++程序实现,两种方案)
解题思路:因为map和multimap容器存储的元素对,会自动根据key值自动排序,所以只要统计出每个元素出现的次数,然后将次数作为key值,元素作为value值存入multimap中。直接遍历multimap最后k个数对就得到k个出现频率最高的元素。map存储数组中的元素nums[i]及其对应出现的次数。然后将map中的数对(key,value)对调存储于multimap,用迭代器从后往前遍原创 2016-05-04 10:46:35 · 1446 阅读 · 0 评论 -
213. House Robber II
解题思路:若第一座房子和最后一座房子只抢其一,去掉不抢的那栋,此题就回归到198 House Robber 的解!原创 2016-05-05 10:38:59 · 600 阅读 · 0 评论 -
198. House Robber(C++实现)
动态规划求解,设n-2座房子最多能抢到f(n-2),n-1座房子能最多抢到f(n-1),n座房子最多能抢f(n),最后一座房子里有nMoney,则可以推导出他们之间的关系(分两种情况,第一种不抢最后一座房子得到收益f(n)=f(n-1);第二种抢最后一座房子得到收益是f(n)=f(n-2)+nMoney;显然抢钱者会选择最大收益!即f(n)=max{f(n-1),f(n-2)+nMoney}.原创 2016-02-16 20:31:11 · 568 阅读 · 0 评论 -
330. Patching Array (C++实现)
解题思路:假设数组nums的“部分元素和”可以表示范围【1, total】内的所有数字,那么向nums中添加元素add可以将表示范围扩充至【1, total + add】,其中add ≤ total+1,当且仅当add = total+1时取到范围上界[1, 2 * total)。若取add>total+1,则会出现断层,元素的和不能覆盖整个【1, total + add】。若nums数组为空,则构造[1, n]的nums为[1, 2, 4, 8, ..., k],k为小于等于n的2的幂的最大值。原创 2016-05-17 09:34:29 · 344 阅读 · 0 评论 -
337. House Robber III (C++实现)
解题思路:递归求解,若为空树返回0;若只有一个根结点就返回根结点的值;否则,若根结点有孩子,两种抢法:抢根结点!不抢根结点,抢根结点的孩子子树!取最大值(选抢的多的方案)!(注:抢根结点,就不能抢根结点的孩子!但可以抢根结点的孩子的孩子~~~)C++代码:原创 2016-05-09 18:41:26 · 794 阅读 · 0 评论 -
349. Intersection of Two Arrays(C++实现)
答案一:class Solution {public: vector intersection(vector& a, vector& b) { sort(a.begin(),a.end()); sort(b.begin(),b.end()); vector ans; for(int i=0,ll=0;i<b.size()原创 2016-05-20 16:57:47 · 1165 阅读 · 0 评论 -
322. Coin Change(C++实现)
递归算法:class Solution { int *dp; vector a; int dfs(int S) { if(dp[S]!=-2) return dp[S]; int ans=-1; for(int i=0;i<a.size();i++)原创 2016-05-23 21:07:49 · 906 阅读 · 0 评论 -
354. Russian Doll Envelopes(C++实现)
运行时间较长,有时间再改进吧class Solution {public: void sort(vector>& s) { const int N=s.size(); //insert sort从小到大排序 for(int i=1;i<N;i++) { int first=s[i].fir原创 2016-06-29 22:16:29 · 982 阅读 · 0 评论 -
300. Longest Increasing Subsequence(C++实现)
动态规划算法,运行时间不短,以后再更新。class Solution {public: int lengthOfLIS(vector& nums) { //动态规划,f[i]存储以第i个元素结尾的最长子序列。 const int N=nums.size(); if(N<=1)return N; int f[N],max=原创 2016-06-30 09:52:04 · 457 阅读 · 0 评论 -
334. Increasing Triplet Subsequence(C++实现)
算法思想一: 用min,max记录递增序列中的第一个和第二个数,若出现a[i]大于这两者就返回true,更新两个值!算法思想二: 用L1,L2标记当前找到1个还是2个递增序列,min1,min2记录当前自增序列中最小值和第二小值。原创 2016-05-13 10:05:31 · 312 阅读 · 0 评论 -
371. Sum of Two Integers
不用考虑正负数的问题,因为负数在计算机中用补码表示,所以用正常的加法规则计算即可!class Solution {public: int getSum(int a, int b) { int x,y,icarry=0; int result=0; //位二进制加法,icarry进位标志 for(int n=0;n<32;n++){原创 2016-06-30 15:57:42 · 563 阅读 · 0 评论 -
336. Palindrome Pairs(C++实现)
本文给出五种C++程序实现的代码!前三种解答程序,已Accepted !是从网上整理来的,加上本人一些分析和代码备注,让看的朋友更容易理解。解答思路一:(最快解答)用哈希表来建立每个单词和其位置的映射,一个set来保存出现过的单词的长度。解答思路二:(很容易想到的算法)考虑所有构成回文的情况1 存在空单词;遍历所有单词,找回文单词,如{“aa”,“”}2 将单词反转,若反转后的单词在单词表中,这两个单词构成回文!如{“abc”,“cba”}3 将每个单词都分成左右两部分,(将aabc分两部分:原创 2016-05-09 22:25:26 · 1252 阅读 · 0 评论 -
88. Merge Sorted Array
Given two sorted integer arrays nums1 and nums2, merge nums2 intonums1 as one sorted array.Note:You may assume that nums1 has enough space (size that is greater or equal tom + n) to hold addit原创 2016-02-20 11:19:55 · 280 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock(只允许一次交易)
我的算法运行时间较长:代码如下:class Solution {public: int maxP(vector& prices,int left,int right){ if(left==right)return 0; int i=left,j=left,max,min; max=min=prices[left];原创 2016-04-27 22:20:27 · 371 阅读 · 0 评论 -
345. Reverse Vowels of a String
本题关键在于找到字符串中的元音字母,用i,j从字符串首尾向中间遍历,遇到元音字母时交换,直到i>=j结束。代码:class Solution {//英文字母中的元音字母有 a,e,i,o,u.public:int check(char c){ string S="aeiou"; return (string("")+c).find_first_o原创 2016-04-28 11:07:21 · 506 阅读 · 0 评论 -
343. Integer Break
分析找规律:n : 2 3 4 5 6 7 8 9 10 11返回值: 1 2 2×2 2×3 3×3 2×2×3 2×3×3 3×3×3 2×2×3×3 2×3×3×3程序如下:class Solution {public: int integerBreak(int n) {//给定不小于2的正数n,原创 2016-04-28 12:11:46 · 461 阅读 · 0 评论 -
341. Flatten Nested List Iterator
/** * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * class NestedInteger { * public: * // Return t原创 2016-04-28 15:54:57 · 625 阅读 · 0 评论 -
19. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the原创 2016-04-12 22:20:13 · 277 阅读 · 0 评论 -
24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.For example,Given 1->2->3->4, you should return the list as 2->1->4->3.Your algorithm should use only constant space. Y原创 2016-03-30 15:53:18 · 218 阅读 · 0 评论 -
299. Bulls and Cows
You are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your friend makes a guess, you provide a hint t原创 2016-03-30 15:20:53 · 276 阅读 · 0 评论 -
290. Word Pattern
Given a pattern and a string str, find if str follows the same pattern.Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.原创 2016-03-30 15:16:27 · 349 阅读 · 0 评论 -
225. Implement Stack using Queues 用两个队列实现栈的基本操作。
Implement the following operations of a stack using queues.push(x) -- Push element x onto stack.pop() -- Removes the element on top of the stack.top() -- Get the top element.empty() -- Return whet原创 2016-02-18 23:25:45 · 358 阅读 · 0 评论 -
9. Palindrome Number
Determine whether an integer is a palindrome. Do this without extra space.解题思想:求得x的最高位,与x最低位比较。我的代码:class Solution {public: bool isPalindrome(int x) { if(x<0)return false;原创 2016-02-18 22:54:42 · 192 阅读 · 0 评论 -
119. Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3,Return [1,3,3,1].Note:Could you optimize your algorithm to use only O(k) extra space?C++代码:class原创 2016-02-17 21:11:34 · 752 阅读 · 0 评论 -
172. Factorial Trailing Zeroes详细解答
Given an integer n, return the number of trailing zeroes inn!. 给定整数n,求n!末尾有几个零。Note: Your solution should be in logarithmic time complexity. 解题方法必须是log数级的时间复杂度(即不能直接求n!的值)解题思路:(关键在于找到n与n原创 2016-02-17 20:45:28 · 602 阅读 · 0 评论 -
118. Pascal's Triangle
Given numRows, generate the first numRows of Pascal's triangle.For example, given numRows = 5,Return[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1]]解题思路:用row1保存上一行向量,row原创 2016-02-17 19:30:27 · 240 阅读 · 0 评论 -
101. Symmetric Tree 对称树,递归算法
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).For example, this binary tree is symmetric: 1 / \ 2 2 / \ / \3 4 4 3But the following原创 2016-02-16 19:14:13 · 585 阅读 · 0 评论 -
1. Two Sum(c++实现)
class Solution {public: vector twoSum(vector& nums, int target) { vector backup(nums); sort(nums.begin(),nums.end()); vector::iterator i1=nums.begin(),i2=nums.end()-1;原创 2016-07-28 13:01:22 · 1760 阅读 · 1 评论