力扣
格子学前端
这个作者很懒,什么都没留下…
展开
-
LeetCode 46. 全排列
深度优先搜索class Solution {public: vector<vector<int>>ans; vector<int>path; vector<bool>st; vector<vector<int>> permute(vector<int>& nums) { int n=nums.size(); path=vector<int&g.原创 2022-01-31 14:10:39 · 97 阅读 · 3 评论 -
LeetCode 45. 跳跃游戏 II
动态规划class Solution {public: int jump(vector<int>& nums) { int n=nums.size(); vector<int>f(n); for(int i=1,j=0;i<n;i++){ while(j+nums[j]<i)j++; f[i]=f[j]+1; } retur.原创 2022-01-31 14:09:20 · 2163 阅读 · 0 评论 -
LeetCode 43. 字符串相乘
模拟列竖式class Solution {public: string multiply(string num1, string num2) { vector<int>A,B; int n=num1.size(),m=num2.size(); for(int i=n-1;i>=0;i--)A.push_back(num1[i]-'0'); for(int i=m-1;i>=0;i--)B.push_back.原创 2022-01-31 14:04:29 · 6329 阅读 · 1 评论 -
LeetCode 40. 组合总和 II
深度优先搜索(回溯)class Solution {public: vector<vector<int>>ans; vector<int>path; vector<vector<int>> combinationSum2(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); dfs(nums,0.原创 2022-01-31 14:03:15 · 79 阅读 · 0 评论 -
LeetCode 39. 组合总和
深度优先搜索(回溯)class Solution {public: vector<vector<int>>ans; vector<int>path; vector<vector<int>> combinationSum(vector<int>& nums, int target) { dfs(nums,0,target); return ans; } .原创 2022-01-31 14:02:00 · 326 阅读 · 0 评论 -
LeetCode 38. 外观数列
双指针class Solution {public: string countAndSay(int n) { string s="1"; for(int i=0;i<n-1;i++){ string t; for(int j=0;j<s.size();){ int k=j+1; while(k<s.size() &&..原创 2022-01-27 23:19:49 · 6978 阅读 · 2 评论 -
LeetCode 36. 有效的数独
class Solution {public: bool isValidSudoku(vector<vector<char>>& board) { bool st[9]; //判断行 for(int i=0;i<9;i++){ memset(st,0,sizeof st); for(int j=0;j<9;j++){ if(..原创 2022-01-24 12:49:59 · 144 阅读 · 0 评论 -
LeetCode 35. 搜索插入位置
二分查找class Solution {public: int searchInsert(vector<int>& nums, int target) { int l=0,r=nums.size(); //target有可能大于所有数 while(l<r){ int mid=l+r>>1; if(nums[mid]<target)l=mid+1; .原创 2022-01-24 12:49:54 · 62 阅读 · 0 评论 -
LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置
二分查找class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { if(nums.empty())return {-1,-1}; int l=0,r=nums.size()-1; while(l<r){ int mid=l+r>>1; if(num.原创 2022-01-24 12:49:48 · 171 阅读 · 0 评论 -
LeetCode 33. 搜索旋转排序数组
二分查找class Solution {public: int search(vector<int>& nums, int target) { if(nums.empty())return -1; int l=0,r=nums.size()-1; while(l<r){ int mid=l+r+1>>1; if(nums[mid]>=nums[0])l=m.原创 2022-01-24 12:49:42 · 138 阅读 · 0 评论 -
LeetCode 31. 下一个排列
贪心class Solution {public: void nextPermutation(vector<int>& nums) { int k=nums.size()-1; while(k>0 && nums[k-1]>=nums[k])k--; if(k<=0)reverse(nums.begin(),nums.end()); else{ int .原创 2022-01-23 16:20:21 · 70 阅读 · 1 评论 -
LeetCode 29. 两数相除
快速幂class Solution {public: int divide(int x, int y) { typedef long long LL; vector<LL>k; bool is_minus=false; if(x<0 && y>0 || x>0 && y<0)is_minus=true; LL a=abs((LL)x),b=abs(.原创 2022-01-23 16:19:12 · 4858 阅读 · 2 评论 -
LeetCode 26. 删除有序数组中的重复项
双指针class Solution {public: int removeDuplicates(vector<int>& nums) { int k=0; for(int i=0;i<nums.size();i++){ if(!i || nums[i]!=nums[i-1]){ nums[k++]=nums[i]; } } ..原创 2022-01-23 16:16:48 · 60 阅读 · 0 评论 -
LeetCode 28. 实现 strStr()
KMPclass Solution {public: int strStr(string s, string p) { if(p.empty())return 0; int n=s.size(),m=p.size(); s=' '+s,p=' '+p; //kmp算法一般习惯数组下标从1开始 vector<int>next(m+1); for(int i=2,j=0;i<=m;i++){ .原创 2022-01-23 16:17:49 · 64 阅读 · 0 评论 -
LeetCode 27. 移除元素
双指针class Solution {public: int removeElement(vector<int>& nums, int val) { int k=0; for(int i=0;i<nums.size();i++){ if(nums[i]!=val){ nums[k++]=nums[i]; } } return..原创 2022-01-23 16:17:42 · 72 阅读 · 0 评论 -
LeetCode 24. 两两交换链表中的节点
链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(n.原创 2022-01-23 10:15:01 · 76 阅读 · 0 评论 -
LeetCode 23. 合并K个升序链表
小根堆/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(.原创 2022-01-23 10:14:52 · 60 阅读 · 0 评论 -
LeetCode 22. 括号生成
深度优先搜索class Solution {public: vector<string>ans; vector<string> generateParenthesis(int n) { dfs(n,0,0,""); return ans; } void dfs(int n,int lc,int rc,string path){ //lc表示左括号总数,rc表示右括号总数 if(lc==n &.原创 2022-01-23 10:14:29 · 189 阅读 · 0 评论 -
LeetCode 21. 合并两个有序链表
链表/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(n.原创 2022-01-23 10:14:07 · 158 阅读 · 0 评论 -
LeetCode 20. 有效的括号
栈class Solution {public: bool isValid(string s) { stack<char>stk; for(auto c:s){ if(c=='(' || c=='{' || c=='[')stk.push(c); else{ if(stk.size() && abs(stk.top()-c)<=2)stk.pop().原创 2022-01-22 10:24:11 · 208 阅读 · 3 评论 -
LeetCode 19. 删除链表的倒数第 N 个结点
计算链表长度/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), ne.原创 2022-01-22 10:22:31 · 258 阅读 · 0 评论 -
LeetCode 18. 四数之和
双指针class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); vector<vector<int>>ans; for(int i=0;i<nums.size();i++){ i.原创 2022-01-22 10:21:06 · 282 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合
深度优先搜索class Solution {public: vector<string>ans; string strs[10]={ "","","abc","def", "ghi","jkl","mno", "pqrs","tuv","wxyz" }; vector<string> letterCombinations(string digits) { .原创 2022-01-22 10:19:55 · 69 阅读 · 0 评论 -
LeetCode 16. 最接近的三数之和
双指针class Solution {public: int threeSumClosest(vector<int>& nums, int target) { sort(nums.begin(),nums.end()); pair<int,int>ans(INT_MAX,INT_MAX); //(x,y) x表示三数之和与target的差值,y表示三数之和 for(int i=0;i<nums.size().原创 2022-01-22 10:18:34 · 168 阅读 · 0 评论 -
LeetCode 15. 三数之和
双指针class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>>ans; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();i++){ if(i &&a.原创 2022-01-22 10:17:28 · 405 阅读 · 0 评论 -
LeetCode 14. 最长公共前缀
纵向扫描class Solution {public: string longestCommonPrefix(vector<string>& strs) { string ans; if(strs.empty())return ans; for(int i=0;;i++){ if(i>=strs[0].size())return ans; char c=strs[0][i].原创 2022-01-22 10:16:22 · 613 阅读 · 0 评论 -
LeetCode 13. 罗马数字转整数
哈希表class Solution {public: int romanToInt(string s) { unordered_map<char,int>hash; hash['I']=1,hash['V']=5; hash['X']=10,hash['L']=50; hash['C']=100,hash['D']=500; hash['M']=1000; int ans=0; ..原创 2022-01-22 10:14:41 · 175 阅读 · 0 评论 -
LeetCode 12. 整数转罗马数字
数组哈希class Solution {public: string intToRoman(int num) { int values[]{ 1000, 900,500,400,100, 90,50,40,10, 9,5,4,1 }; string units[]={ "M", "CM..原创 2022-01-22 10:12:57 · 678 阅读 · 0 评论 -
LeetCode 11. 盛最多水的容器
双指针class Solution {public: int maxArea(vector<int>& height) { int ans=0; for(int i=0,j=height.size()-1;i<j;){ ans=max(ans,min(height[i],height[j])*(j-i)); //每次更新一次容积 if(height[i]>height[j])j--.原创 2022-01-22 10:10:51 · 225 阅读 · 0 评论 -
LeetCode 9.回文数
数学class Solution {public: bool isPalindrome(int x) { if(x<0)return false; int t=x; long long ans=0; while(x){ ans=ans*10+x%10; x/=10; } return ans==t; }};//数学,整体翻转...原创 2022-01-20 22:30:58 · 225 阅读 · 3 评论 -
LeetCode 8.字符串转换整数 (atoi)
模拟class Solution {public: int myAtoi(string s) { int k=0; while(k<s.size() && s[k]==' ')k++; //去除空格 int is_minus=1; //存储正负号 if(s[k]=='-')is_minus=-1,k++; else if(s[k]=='+')k++; long long ..原创 2022-01-20 22:28:50 · 84 阅读 · 0 评论 -
LeetCode 7.整数反转
数学class Solution {public: int reverse(int x) { long long ans=0; while(x){ //秦九韶算法 ans=ans*10+x%10; x/=10; } if(ans>INT_MAX || ans<INT_MIN)return 0; return ans; }};//数学//.原创 2022-01-20 22:26:58 · 70 阅读 · 0 评论 -
LeetCode 6.Z 字形变换
按行访问class Solution {public: string convert(string s, int n) { string ans; if(n==1)return s; //特殊情况 for(int i=0;i<n;i++){ if(i==0 || i==n-1){ //仅有一个等差数列,公差为2*n-2 for(int j=i;j<s.size();j+=2*.原创 2022-01-20 22:22:55 · 200 阅读 · 0 评论 -
LeetCode 5.最长回文子串
中心扩展class Solution {public: string longestPalindrome(string s) { string ans; for(int i=0;i<s.size();i++){ //判断奇数回文串 int l=i-1,r=i+1; while(l>=0 && r<s.size() && s[l]==s[r]).原创 2022-01-20 22:20:29 · 75 阅读 · 0 评论 -
LeetCode 3. 无重复字符的最长子串
滑动窗口(双指针)class Solution {public: int lengthOfLongestSubstring(string s) { unordered_map<char,int>hash; int ans=0; for(int i=0,j=0;i<s.size();i++){ hash[s[i]]++; while(hash[s[i]]>1)hash[s[j+.原创 2022-01-20 20:58:16 · 293 阅读 · 0 评论 -
LeetCode 2.两数相加
链表模拟/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), nex..原创 2022-01-20 20:16:55 · 588 阅读 · 0 评论 -
LeetCode 1.两数之和
哈希表class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int,int>hash; for(int i=0;i<nums.size();i++){ if(hash.count(target-nums[i]))return {i,hash[target-nums[.原创 2022-01-20 19:39:22 · 216 阅读 · 0 评论