- 博客(52)
- 资源 (4)
- 收藏
- 关注
原创 LeetCode-29-Divide Two Integers(Numbers)-Medium
题意理解:在不使用乘法、除法和求余运算的情况下计算两个整数相除的结果;题目分析:1. 注意整数的边界问题;2. 使用移位或累加代替乘2操作;3. 将变量扩展为long long数据类型进行中间计算(long类型可能也为32 bits);4. 注意STL中abs()的强制类型转换;解题代码:class Solution {public: in
2015-12-31 09:23:33 385
原创 LeetCode-28-Implement strStr()(Sting/穷举)-Easy
题意理解:自己实现strStr()函数;题目分析:穷举,注意边界处理;解题代码:class Solution {public: int strStr(string haystack, string needle) { int sizeofHayStack=haystack.length(); int sizeofNeed
2015-12-30 08:39:29 438
原创 LeetCode-27-Remove Element(数组)-Easy
题意理解:去除先前数组中值为val的元素,返回新数据长度,和对应长度的新数组内容;题目分析:水题;解题代码:class Solution {public: int removeElement(vector& nums, int val) { int size=nums.size(); if(size<=0){
2015-12-29 09:07:48 348
原创 LeetCode-26-Remove Duplicates from Sorted Array(排序/内部排序)-Easy
题意理解:去除先前数列中的重复元素;题目分析:1. 先排序,再去重;2. 不能分配额外空间,所以需要进行内部排序;解题代码:class Solution {public: int removeDuplicates(vector& nums) { int size=nums.size(); if(size<=0){
2015-12-29 08:52:57 245
原创 LeetCode-24-Swap Nodes in Pairs(链表)-Medium
题意理解:交换链表中相邻的两个元素,如原链表为a->b->c->d,修改为b->a->d->c;题目分析:1. 不能重新分配多余内存,即只修改指针指向,不增加新的节点内容;2. 标示要处理的两个相邻元素位置p1,p2,以及p1之前的位置pPre和p2之后的位置pNext;3. 根据题目要求交换对应位置指针的指向内容;解题代码:/** * Definit
2015-12-29 08:23:55 323
原创 LeetCode-22-Generate Parentheses(DFS/递归)-Medium
题意理解:给定左右圆括号"()"的对数,打印输出所有有效的圆括号组会;解题思路:参考:http://blog.csdn.net/yapian8/article/details/27109689解题代码:class Solution {private: vector ans; void func(vector &v, string s, int
2015-12-28 08:25:20 447
原创 LeetCode-21-Merge Two Sorted Lists(链表/归并)-Easy
题意理解:合并两个链表为一个链表,其中,两个链表先前已按照从小到的顺序进行了排序,要求合并后的链表仍保持从小到大的顺序;解题分析:归并算法;解题代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; *
2015-12-27 21:36:17 298
原创 LeetCode-20-Valid Parentheses(堆栈)-Easy
题意理解:判断字符串中'(') , '[]', '{}' 是否成对出现;题目分析:1. 将非右括号的字符放入栈中;2. 出现右括号时,检测栈顶是否为对应的左括号。如果为对应的左括号则继续字符串的下一个字符检查,否则返回false;3. 最后判断栈的大小是否为0,非零则返回false;解题代码:class Solution {public: bo
2015-12-27 20:59:02 294
原创 LeetCode-19-Remove Nth Node From End of List(链表)-Easy
题意理解:删除链表中倒数第n个数;题目分析:1. 确定链表长度;2. 找到需要删除对象的位置;解题代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : v
2015-12-27 16:09:59 291
原创 LeetCode-18-4Sum(证明/KSum)-Medium
题意理解:在vector中找出所有的a,b,c,d,其中a解题思路:同15-3Sum解题代码:class Solution {public: vector> fourSum(vector& nums, int target) { int size=nums.size(); vector> ans; if(
2015-12-27 15:31:21 549
原创 LeetCode-17- Letter Combinations of a Phone Number(查表/递归)-Medium
题意理解:将手机的数字按键值,转换为对应字母的所有组合;题目分析:1. 查表;2. 将数字字符串的首字符取出,然后剩余的字符子串做递归处理;解题代码:class Solution {public: vector letterCombinations(string digits) { vector ans; int d
2015-12-27 12:45:37 389
原创 LeetCode-16-3Sum Closest(证明/KSum)-Medium
题意理解:求解vector中三个数之和与target的值最接近,其中,假设vector中比存在这样的三个值;题目分析:同15-3Sum解题代码:class Solution {public: int threeSumClosest(vector& nums, int target) { int size=nums.size();
2015-12-27 11:29:50 474
原创 LeetCode-15-3Sum(证明/KSum)-Medium
题目理解:求解vector中三个数(a,b,c)之和为0,其中,a、b、c不能为重复值,并且按照a解题分析:1. 典型的KSum题目;1)先排序;2)首尾两端两个指针同时向对端移动;3)过程中避免重复的结果;题目的关键是证明两个指针向对端移动的过程中,不会漏掉有效的取值(可以使用反正法进行证明);解题代码:class Solution {pub
2015-12-26 12:20:05 432
原创 LeetCode-14-Longest Common Prefix(Number/Vector/String)-Easy
题意理解:vector中的元素为string,求解string中的最大前缀;题目分析:1. 穷举;2. 注意vector为空的边界条件;解题代码:class Solution {public: string longestCommonPrefix(vector& strs) { if(strs.size()==0){
2015-12-25 08:35:49 340
原创 LeetCode-13-Roman to Integer(number/模拟)-Easy
题意分析:将罗马数字转换为阿拉伯数字(0-3999);题目分析:简单模拟;解题代码:class Solution {public: int romanToInt(string s) { map m; m.insert(pair("0",0)); m.insert(pair("I",1));
2015-12-24 08:53:45 379
原创 LeetCode-12-Integer to Roman(哈希)-Medium
题意理解:将整数转换为罗马数字题目分析:1. 分解出千位、百位、十位和个位;2. 对应查表;解题代码:class Solution {public: string intToRoman(int num) { if(num==0){ return 0; } st
2015-12-24 08:20:51 406
原创 LeetCode-9-Palindrome Number(Number)-Easy
题意理解:求输入整数是否为回文;题意分析:1. 不能使用额外的空间,所以不能直接把整数转换为字符串进行处理;2.整数反转也不是好的方法,会出现溢出的情况;3. 负数不为回文;4. 解决方法为通过除法和求余数的方式夺得对应最左边和最右边的数值进行比较;解题代码:class Solution {public: bool isPalindrome
2015-12-23 09:20:07 345
原创 LeetCode-8-String to Integer (atoi) (String/Num)-Easy
题意理解:自己实现atoi()函数,完成字符串到整数的转变;题意分析:注意对特殊情况的检测;解题代码:class Solution {public: int myAtoi(string str) { //find the first num int numIndex=-1; int numEnd;
2015-12-23 08:30:34 420
原创 LeetCode-11-Container With Most Water(证明)-Medium
题意理解:x坐标差为宽,两个y坐标的较小值为高,求解最大的宽高乘积;题目分析:1. 穷举会超时;2. 假设 am与an间的乘积最大,则m的左边不存在比am大的值,n右边不存在比an大的值;解题代码:class Solution {public: int maxArea(vector& height) { int maxContain
2015-12-20 18:00:17 669
原创 LeetCode-5-Longest Palindromic Substring(动态规划)-Medium
题意理解:求解最长的回文;题目分析:1. 通过遍历完成,但算法的复杂度过高(O(N3));2. 采用动态规划,复杂度为O(N2)(先前以为所谓的动态规划,就是像《算法导论》里车间的那个例子,从最终决策节点向终端节点进行递归,最终获得最优解。其实,只要是最终最优决策依赖于过程最优决策的方式都是动态规划)解题代码:class Solution {public:
2015-12-20 16:49:55 645
原创 LeetCode-3-Longest Substring Without Repeating Characters(穷举)-Medium
题意理解解决最长字串长度;解题思路:1. 递归(好像会栈溢出);2. 记录比较遍历中的最大值;解题代码:class Solution {public: int lengthOfLongestSubstring(string s) { if(s.length()==0){ return 0; }
2015-12-19 23:38:02 494
原创 LeetCode-2-Add Two Numbers(链表)-Medium
题意理解:将两个链表的值对应相加;题目解析:注意相加进位;解题代码:class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* pL1=l1; ListNode* pL2=l2; ListNode* pAns
2015-12-19 21:49:38 381
原创 LeetCode-1-Two Sum(哈希)-Medium
题意分析:在给定的整数序列中找到位置index1和index2,要求这两个位置的数值之和等于target。其中,index1题目分析:1. 穷举是会超时的;2.使用hash;3.C++中没有hash,就自己写了一个,使用数值作为key,位置作为value(注意负数数值的出现);解题代码:#include#include#includeusing n
2015-12-19 19:37:08 534
原创 LeetCode-7-Reverse Integer(Nmber-Strng)-Easy
题意分析:将输入整数进行反转,如果反转后的数已超过整数范围(-2147483648~2147483647),则返回0;解题分析:1. 注意int32的范围越界(返回0);2. 打印输出时避免最高位为0的情况,如00233;4. 使用string类型标示输入和变换,规避取值范围的越界;3.使用stringstream实现整数和string之间的转换;5.不能使用_
2015-12-18 09:24:11 396
原创 LeetCode-6-ZigZag Conversion(找规律)-Easy
题意分析:将输入字符从上到下排列,到达底部一行后,从下到上翻折回最上一行,如此反复。最终将排列字符按每行的从左到右,从上到小顺序进行重新打印;解题思路:按照规则找规律(参考代码的关键是标记字符从上向下和从下向上排列的方向)解题代码:class Solution {public: string convert(string s, int numRows)
2015-12-18 09:17:46 356
原创 POJ-3386
题意理解:判断圆A和圆B是否同时在圆P中;题目分析:1.A在B中,B在P中;2.B在A中,A在P中;3.AB不相交,均在P中;解题代码:#includeusing namespace std;int main(int argc, char *argv[]){ int A,a,B,b,P; cin>>A>>a>>B>>b>>P; if((a>
2015-12-15 09:13:00 460
原创 POJ-3325
题目理解:去除最高分和最低分(有重复的最高分或最低分只去除一个),然后取平均,保留整数;解题思路:1. 排序,然后去两端,求平均;2. 使用sort()时,注意区间为半闭,半开[ );解题代码:#include#include#includeusing namespace std;int score[100];int main(int argc,
2015-12-14 09:14:19 361
原创 POJ-3302
题意理解:求字符串S2或其反转的字符串S2‘ 是否为字符串S1的子串;解题思路:1. 借助递归分别将S1,S2分解为其子串进行比较;2.利用string的find(),substring()方法;解题代码:#include#includeusing namespace std;string reverseString(string s){ stri
2015-12-14 08:50:16 497
原创 POJ-3300(用例通过,但不知什么原因一直WA)
题意分析:前轮和后轮均有若干个齿轮,每个齿轮又有若干齿牙。先将所有后轮齿轮的齿牙与前轮的齿轮齿牙做比,并将这些比值从小到大排序,最后求解相邻两个比值的比最大的一个。解题思路:模拟;用例过了,也看了别人的解题代码,感觉没什么问题。但提交一直WA;解题代码:#include#include#includeusing namespace std;int f
2015-12-13 22:01:55 574
原创 POJ-3224
题意理解:找出3个数最多的一行;如果两行3的个数一样最多,则取前面那个;解题思路:题意很容易让人误解:Exactly one of aij and aji (i ≠ j) is 3 and the other one will be less than 3解题代码:#includeusing namespace std;int main(int arg
2015-12-13 20:52:33 454
原创 POJ-3183
题意理解:找出输入中的An,满足A(n-1)=A(n+1);解题分析:1.注意首尾的边界条件;2. 注意理解题意,我一开始认为,找到一个局部最大值后,它两边只要比它小的stump都可以自动爆破。忽略了“adjacent stumps”中的“adjacent”;解题代码:#includeusing namespace std;int h[50000+1]
2015-12-13 19:29:14 338
原创 POJ-3158
题意理解:平移两个字符串,要求两个字符串的对应位置不能同时出现两个‘2’;解题思路:假设字符串str1和str2,1. 一般的思路是:从str1[n]与str2[0]做比较开始,然后str1不断向右平移,做比较;2. 等价思路是:先将str1看作bottom,str2看作top,从str1[0]和str2[0]开始做比较,str2不断向右平移;然后反过来,str
2015-12-13 17:21:36 564
原创 POJ-3117
题意理解:比赛赢的队获得3分,打平每队获得1分;题目分析:打平比赛场数=3*比赛场数-所有队比赛得分和解题代码:#include#includeusing namespace std;int main(int argc, char *argv[]){ int t,n; while(cin>>t>>n, t){ int scoreSum=0;
2015-12-13 11:02:06 446
转载 POJ-3100
题意理解:求解指数的Pow(A,N)的底A,使得pow(A,N)最接近B;解题分析:水题;解题代码:#include#includeusing namespace std;int main(int argc, char *argv[]){ int B,N; while(cin>>B>>N, B||N){ int preDiff=B; int
2015-12-12 21:33:44 312
原创 POJ-3096
题意理解:从给定字符串中,每隔固定间隔取两个字符,组成一对。如果针对所有固定间隔取出的数对均不相等,则该字符串为surprise字串。解题思路:利用map容器,第一个值不能相同的特性进行问题求解;解题代码:#include#include#include#includeusing namespace std;int main(int argc, ch
2015-12-12 16:22:28 470
原创 POJ-3094
题意理解:将输入的以大写字母和空格组成的字符串,按规则计算checksum;解题思路:可以借助getline()来完成对字符串的整行输入;解题代码:#include#includeusing namespace std;int main(int argc, char *argv[]){ string s; while(1){ getline(ci
2015-12-12 14:53:58 415
原创 POJ-3086
题目理解:按照所给公式求和;解题思路:水题;解题代码:#includeusing namespace std;int Tn(int n){ return n*(1+n)/2;}int main(int argc, char *argv[]){ int caseNum; cin>>caseNum; for(int i=0;i<caseNum;i
2015-12-12 14:26:30 546
原创 POJ-3077
题意理解:1)从最低位起,逢5进1,并将处理的位数字变为0;2)当被处理位为最高位时,直接打印该位数字;解题思路:利用string来求解;解题代码:#include#includeusing namespace std;#define ROUND 5int array[9];int main(int argc, char *argv[]){
2015-12-12 12:17:56 365
原创 POJ-3062
题意理解真是没读懂题意;解题方法:整行输入,整行打印输出;解题代码:#include#includeusing namespace std;int main(int argc, char *argv[]){ string s; while(getline(cin,s)){ cout<<s<<endl; } return 0;}
2015-12-11 16:10:16 275
原创 POJ-3030
题意理解:如果r>e-c,则不用做广告;如果r=e-c, 则做不做广告无所谓;如果r解题思路:水题;解题代码:#includeusing namespace std;int main(int argc, char *argv[]){ int caseNum; cin>>caseNum; for(int i=0;i<caseNum;i++){
2015-12-11 15:49:57 499
tpipv6.h(头文件)
2013-01-09
Putty资源合集
2012-11-30
windows界面下的网络编程
2011-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人