
leetcode
han_hhh
这个作者很懒,什么都没留下…
展开
-
8. 字符串转换整数 (atoi)
这道题看起来不难,但是他要考虑的小细节也太多了。除了题目中已经给出来的样例,还有几个测试过程中发现的样例。考虑还是不够全面整数溢出这一块处理的还是不够好。INT_MIN=-2^31=-2147483648INT_MAX=2^31-1=2147483647刚开始只是简单处理对于 ans1=ans0*10+str[i] 当ans0<INT_MIN/10 或者ans1&g...原创 2019-08-02 17:35:50 · 118 阅读 · 0 评论 -
23. 合并K个排序链表
合并n个有序链表,直接套用合并两个链表的程序,先将lists[1]赋值给temp,循环i从1到lists.size(),合并lists[i]和temp赋值给tempListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode* res=new ListNode(-1); ListNode*...原创 2019-08-19 10:29:09 · 108 阅读 · 0 评论 -
21. 合并两个有序链表
要先花大量时间思考清楚后再开始动手敲代码,要不会很晕的。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Sol...原创 2019-08-19 11:29:35 · 89 阅读 · 0 评论 -
26. 删除排序数组中的重复项
要注意并没有说全是正数,所以最小的数应该是nums[0].思路:因为一个有序数组,cur从nums[0]开始,++,跟当前nums[i]比较,若nums[i]==cur,更改数组,将其赋值到该放数字的位置。若nums[i]<cur,说明不是连续的递增序列,cur++若nums[i]>cur,说明有重复的数字,且该数字已经在原数组中更改了,i++class So...原创 2019-08-19 12:01:14 · 162 阅读 · 0 评论 -
27. 移除元素
做完上一题后这道题很容易class Solution {public: int removeElement(vector<int>& nums, int val) { int i=0,j=0; int number=0; while(i<nums.size()){ if(nums[i]...原创 2019-08-19 12:08:36 · 100 阅读 · 0 评论 -
17. 电话号码的字母组合
遍历之前先给一个res={""}每个数字对应一个字符串,将该字符串加入到结果中每个字符串的最后边for(string s :result)遍历result中的每一个字符串并将其赋值给s例如23result开始为{“”}读入2先将{“”}赋值给tmp暂时保存,给result的每一个元素s都加上2对应的a,添加到tmp后,再给result的每一个元素s都加上2对应的...原创 2019-08-10 22:21:42 · 132 阅读 · 0 评论 -
25. K 个一组翻转链表
计数,数量到达k就翻转该组。pre用来存储该组的上一个元素,nextpre用来存储该组的最后一个元素的下一个元素翻转这块有点绕/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(...原创 2019-08-20 10:36:30 · 96 阅读 · 0 评论 -
28. 实现 strStr()
法一:遍历haystack字符串,找到needle的第一个字符的位置,挨个比较,若均相同则返回这个i,否则继续遍历haystack串。还要注意needle为空串的情况刚开始 最后一个测试样例未通过class Solution {public: int strStr(string haystack, string needle) { int flag...原创 2019-08-20 10:57:02 · 114 阅读 · 0 评论 -
18. 四数之和
与15、三数之和,16、最接近的三数之和思想类似,在三数之和外再套一层for循环。class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { int len=nums.size(); sort(nu...原创 2019-08-11 09:37:08 · 251 阅读 · 0 评论 -
19. 删除链表的倒数第N个节点
1、普通思路先遍历一遍链表得到他的长度,若长度=0,则直接返回,若删除的是第一个元素,则直接返回head->next,否则按常规流程直接删除倒数第N个元素/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListN...原创 2019-08-11 10:41:44 · 105 阅读 · 0 评论 -
22. 括号生成
法一、观察n与n-1时的情况,找到新括号添加的位置,观察发现,n是在n-1的每个空白位置都加一对括号,最后将所有情况中重复的去掉后得到的。法二、递归,n有n个左括号,n个右括号,一共2n个,生成时,要保证当前位置左边的右括号个数<=左括号,(若右括号>左括号,左边会出现))(类似情况)用left和right来表示剩余的左括号和右括号。1、若left>righ...原创 2019-08-18 10:30:53 · 119 阅读 · 0 评论 -
15.三数之和
1、将nums排序用三个指针first,second,third2、first指针从头指向倒数第三个元素,三个数之和为0,所以若first指向元素为正,就break;此外,不遍历相同的两个元素,若first所指元素与前一个相同,则跳过。3、second指针和third指针分别指向first后的首尾元素。target=0-first;若second和thrd的和<target,则将...原创 2019-08-07 12:51:50 · 137 阅读 · 0 评论 -
21. 合并两个有序链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* m...原创 2019-08-08 23:24:13 · 107 阅读 · 0 评论 -
16. 最接近的三数之和
刚开始写了这样一个条件, 但是后来考虑,若target为负 这样不合理 if(nums[first]>=target){ return nums[first]+nums[first+1]+nums[first+2]; }正解,是上一个问题3Sum的延续class Solution {public: int th...原创 2019-08-08 20:48:52 · 144 阅读 · 0 评论 -
10.正则表达式匹配
刚开始很奇怪为什么这个题的标签是困难,然后写了出来发现我写出来的只针对从头到尾都一样,而不是如示例4,可以匹配一部分。示例 4:输入:s = "aab"p = "c*a*b"输出: true解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。只针对从头到尾相同的字符串的程序奉上,可能会有用,本题中通过了 357...原创 2019-08-03 14:46:44 · 333 阅读 · 0 评论 -
4.寻找两个有序数组的中位数
首先,根据题目中复杂度为O(log(m+n)),应该是用二分法。刚开始觉得很有想法,应该用分治,就是写不出来,无奈又走上了搜题解的不归路(题解也看了好久好久啊)怎么用这个二分法呢两个数组nums1和nums2,不同时为空。i为数组nums1的起始位置,j为数组nums2的起始位置,k表示查找两个数组的第k个元素。运算中一步步缩小要查找元素的范围,用递归来实现,跳出递归的途径有两个:1、...原创 2019-07-31 17:13:10 · 209 阅读 · 0 评论 -
11、盛最多水的容器
1、暴力法(超时)class Solution {public: int maxArea(vector<int>& height) { int maxx=0; for(int i=0;i<height.size()-1;i++){ for(int j=i+1;j<height.size();j+...原创 2019-08-04 18:05:16 · 102 阅读 · 0 评论 -
12. 整数转罗马数字
贪心法把4,9,40,90,400,900看成和1,5,10,50,100,500,1000一样的,用贪心法,始终取number中当前最大的数class Solution {public: string intToRoman(int num) { int number[13]={1000,900,500,400,100,90,50,40,10,9,5,4,1}...原创 2019-08-05 11:40:59 · 101 阅读 · 0 评论 -
14.最长公共前缀
要注意strs为空的情况思路每次都是从第一个单词中取字符,与后边单词的对应位置比对,若都可比对成功,则把这个字符加入到结果中。,否则返回上一次的结果。程序中用last来存储上一个字符的比对结果,res为当前字符的比对结果。最后比对完成后,再把res赋值给last(走到这一步说明第一个单词的所有字符都比对成功了。)class Solution {public: string ...原创 2019-08-05 12:15:28 · 170 阅读 · 0 评论 -
5.最长回文子串
1、暴力法:超时了,只过了一小半数据class Solution {public: string longestPalindrome(string s) { string start; string tmp; string result=""; int maxx=0; for(int i=0;i<...原创 2019-08-01 10:41:20 · 94 阅读 · 0 评论 -
13.罗马数字转整数
处理IV、IX、XL、XC、这些特例的情况,就是比较字符的后一个是否>前一个,如果是,说明为特殊情况。则用number[i+1]-number[i]class Solution {public: int romanToInt(string s) { int result=0; map<char,int> number; ...原创 2019-08-05 18:03:23 · 111 阅读 · 0 评论 -
6.Z字形变换
解法一:暴力法,把整个图形分成最后一个图形和剩下的图形,每个图形分为第一列和剩下的列,找规律编程。 图中每一个对勾是一个图形找bug找了好久好久,最后提交的时候还因为开的数组A的大小不合适,导致数组下边越界或者超时,试了几次竟然试出来了合适的大小…… 感觉自己真是个老实人。这种解法其...原创 2019-08-01 15:54:25 · 165 阅读 · 0 评论 -
7.整数翻转
重点是考虑整数溢出的情况:ans1=ans0*10+temp不能把运算后的ans1直接与INT_MAX和INT_MIN比较,如果ans1超出数据范围,那么会报错;但是可以把运算前的ans0与INT_MAX/10或INT_MIN/10比较,若ans0>INT_MAX/10,或ans0<INT_MIN/10则ans1一定会超出数据范围,返回0class Solution...原创 2019-08-02 09:43:45 · 107 阅读 · 0 评论 -
20.有效的括号
注意输入为"]"的情况class Solution {public: bool isValid(string s) { stack<char> res; map<char,char> record; record.insert(map<char,char>::value_type('(',')')...原创 2019-08-08 17:16:39 · 92 阅读 · 0 评论 -
5052. 最大层内元素和
给你一个二叉树的根节点root。设根节点位于二叉树的第1层,而根节点的子节点位于第2层,依此类推。请你找出层内元素之和最大的那几层(可能只有一层)的层号,并返回其中最小的那个。参考/** * Definition for a binary tree node. * struct TreeNode { * int val; * Tree...原创 2019-08-18 13:23:14 · 112 阅读 · 0 评论