Leetcode
Mr.阿Q
每天【打卡】任务日常搬砖
展开
-
Leetcode 35 vector<int>::iterator 的注意事项
思路:先用STL下界函数查找,找到返回,找不到插入,插入后再对后面排序(1)对于vector每次的插入、删除均会使迭代器失效(2) 对于迭代的重载可以用下标 i 和 begin() 完成 ,例如 想取nums[i]的迭代器,iterator=nums.begin()+i;int searchInsert(vector<int>& nums, int target) { //lower_bound vector<int>::iterator begin =原创 2020-10-17 16:17:20 · 219 阅读 · 0 评论 -
Leetcode 34 二分或者lower_bound / upper_bound用法
思路1:线性检索思路2:利用上下界函数,写法简洁较快思路3:在时间复杂度内的二分法思路1:class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(!nums.size())return { -1,-1 }; vector<int>::iterator p = find(nums.begin(),原创 2020-10-17 14:33:14 · 339 阅读 · 0 评论 -
Leetcode 14 string::find / substr
思想:利用C++ string::find 函数的特性,暴力匹配重要特性:substr(start , [length ]) ;如果 length 为 0 或负数,将返回一个空字符串 string::find(str); //匹配返回首下标,不匹配返回string::nopos=-1# include<iostream># include<vector># include<string># include<al...原创 2020-10-14 19:01:42 · 141 阅读 · 0 评论 -
Leetcode 31 next_permutation 使用
思路:全排列,调用STL的next_permutation//备注:认为太简单太随意的可以去看下源代码class Solution {public: void nextPermutation(vector<int>& nums) { next_permutation(nums.begin(), nums.end()); }};//STL 中实现的源代码template <class _BidirectionalIter>.原创 2020-10-11 13:41:10 · 102 阅读 · 0 评论 -
Leetcode 29 两数相除 学习感悟
思路1:暴力减法,每次加1思路2:每次除数自身相加,res自身相加,以倍数增加//BF思路1:class Solution {public: int divide(int dividend, int divisor) {//a/b 10/3 int res = 0; if (dividend == 0)return 0;//a为0 if (divisor == 1)return dividend;//b为1 if (divisor == -1原创 2020-10-09 15:43:07 · 109 阅读 · 0 评论 -
Leetcode 27 erase 用法
思路:直接调用STL函数,当然速度并不会太快至于这两个函数的用法,这个里面有图解链接:https://blog.csdn.net/QingCoffe/article/details/108885767# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits>原创 2020-10-08 14:08:24 · 178 阅读 · 0 评论 -
Leetcode 26 unique 使用
思路:直接调用STL库函数 (简单但是肯定不会快)# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits># include<stack># include<queue>using namespace std;int remov.原创 2020-10-08 13:57:52 · 268 阅读 · 0 评论 -
Leetcode 25 k个一组翻转链表 递归
思路:日常递归每k个完成操作,递归一次# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits># include<stack># include<queue>using namespace std;struct ListNod原创 2020-10-08 13:42:34 · 94 阅读 · 0 评论 -
Leetcode 24 两两交换链表中的节点 学习感悟
思路:递归思想2->1->4->3->5 链表,head=21互换,变12的返回值,其中2的next等于调用下一层435的返回值,43互换变34返回值节点3给2的next,4的next调用递归5的返回值# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<原创 2020-10-08 13:19:11 · 108 阅读 · 0 评论 -
Leetcode 23 合并k个升序链表 学习感悟
思路:纯暴力,依次遍历依次比较偷取,不new新节点,直接拿过来# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits># include<stack>using namespace std;struct ListNode { int val;原创 2020-10-07 14:10:11 · 70 阅读 · 0 评论 -
Leetcode 21 合并两个有序链表 学习感悟
思路:迭代一个个往里面加# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits># include<stack>using namespace std;struct ListNode { int val; ListNode* next;原创 2020-10-06 21:59:35 · 918 阅读 · 0 评论 -
Leetcode 20 有效括号 学习感悟
思路:用栈来做括号匹配,左括号入栈,右括号跟栈内匹配,匹配继续 ,不匹配则return false,直至所有符号循环结束,若结束后栈空则匹配,否则不匹配。# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits># include<stack>u原创 2020-10-06 21:00:12 · 96 阅读 · 0 评论 -
Leetcode 19 删除链表的倒数第N个节点 学习感悟
思想:用内存换时间为了不二次遍历,在第一次遍历的时候用指针数组 vector<ListNode*>p; 将每一个节点指针都保存下来删除节点的下标正好等于 int size = p.size()-n; //n为删除的倒数第n个节点# include<iostream># include<vector># include<string># include<algorithm># include<math.h&g...原创 2020-10-06 20:45:03 · 83 阅读 · 0 评论 -
Leetcode 18 四数之和 学习感悟
思路:设置 i j k n 四个游标,思想如同三数之和# include<iostream># include<vector># include<string># include<algorithm># include<math.h># include<climits>using namespace std;vector<vector<int>> fourSum(vector<int原创 2020-10-06 20:24:07 · 76 阅读 · 0 评论 -
Leetcode 17 电话号码的字母组合 学习感悟
思路:首先提前存好要用的nums参考表,为了让字符串中的数字与参考表下标一致,01可以存无用信息整个核心思想就是递归,如" 234 "数字 [ int ip = str.at(0) - '0'; 获取vector中的下标]第一层"234"拿到2的数字,2对应abc,因此有nums[ip].size()次循环 ,首循环pushstr="a"【拿str首字母,递归下去str少首字母】 第二层"34"拿到3的数字,3的对应def ,因此有nums[ip].size()次循环,...原创 2020-10-06 19:57:38 · 91 阅读 · 0 评论 -
Leetcode 16 最接近三数之和 学习感悟
思路:首先整体思路还是之前的三数和游标的思想当 i+j+k > 0 时候说明k取的数字大了,k--当 i+j+k <0 时候说明j取的数字小了, j++只不过在每次计算过程加上count值和给定的target比较,每次比较res只保留最小的count的计算结果。最终将res返回# include<iostream># include<vector># include<string># include<algorithm...原创 2020-10-06 18:55:54 · 62 阅读 · 0 评论 -
Leetcode 15 三数之和 学习感悟
思路:首先针对整个数组进行排序,使数组处于有序状态class Solution {public:vector<vector<int>> threeSum(vector<int>& nums) { int n = nums.size(); sort(nums.begin(), nums.end()); vector<vector<int>> ans; // 枚举 a for (int first = 0; fir.原创 2020-10-06 13:42:32 · 97 阅读 · 0 评论 -
Leetcode 13 罗马数字转整数 学习感悟
思路:首先提前存好每个字符和对应的数字如:MCMXCIV先比较第一个字符M,找到对应的vector位置和对应的数字,此时看第二给数字MC是否和vector中的串匹配若不比配,先记下M=1000,若匹配则记录对应值,遇到C找到对应100,CM匹配900,则记录900,XC匹配90,IV匹配4总计:1994class Solution {public:void priVector(vector<pair<string, int>>& s) { s.pu原创 2020-10-06 13:39:09 · 84 阅读 · 0 评论 -
Leetcode 12 整数转罗马数字 学习感悟
思路:提前用vector把一对pair存好(从小到大的顺序排列好),给出的数字跟vector中的数字比较,如98,遇到第一个比他大的数字90,总数减去它,剩下8,并且输出90对应的char类型XC,剩下8继续上述操作,直至为0,8大于5,减去5为3,输出V,3大于1故输出III。综合输出 XCVIIIclass Solution {public:void priVector(vector<pair<string, int>>& s) { s.push_bac.原创 2020-10-06 13:33:43 · 79 阅读 · 0 评论 -
Leetcode 11 盛水最多的容器 学习感悟
class Solution {public: int maxArea(vector<int>& height) { int i = 0, j = height.size() - 1; int res = 0; while (i < j) { res = max((j - i) * min(height[i], height[j]), res); height[i] < height[j] ? i++ : j--; } r...原创 2020-10-06 13:28:42 · 58 阅读 · 0 评论 -
Leetcode 2 两数相加 学习感悟
思路:首先分4种情况讨论:p1 ,p2 哨兵都存在 ,正常相加求和取余,分离个位和十位。个位存入新节点,十位给carry , p1++,p2++p1存在,p2不存在,将carry带上和p2数字正常相加求和取余,分离个位和十位 ,个位存入新节点,十位给carry , p1++p2存在,p1不存在,将carry带上和p1数字正常相加求和取余,分离个位和十位,个位存入新节点,十位给carry , p2++p1,p2,都不存在,carry存在,将carry存入新节点置0,结束整个工作....原创 2020-10-02 14:55:31 · 99 阅读 · 0 评论