leetcode
沙扬娜拉的裙裾
刚刚步入计算机大军的小草虚心请教
展开
-
真实面试题-消消乐连续三个或者三个以上字符消除
题目如:abbbaac消除结果是c因为leetcode也没有刷题链接,所以自己写了几个测试用例通过了一下,以下是代码:string xiaoxiaole(string s){ if(s.length()<=2) return s; stack<char> save; save.push(s[0]); int count=1; int i=1; string res = "";原创 2020-10-12 00:11:31 · 1948 阅读 · 1 评论 -
leetcode#416 分割等和子集
判断是否能把数字分成相等的两部分,先求和sum,如果sum不是2的倍数那么返回false,然后就变成,搜索是否存在一堆数 求和为sum/2,一开始想用递归:超时了动态规划算法:声明一个大小为sum/2+1的数组,dp[0]=true,然后两层循环:for(int num:nums){ for(int j=sum/2;j>=num;j--){ dp[j] = dp[j] || dp[j-num];//用当前元素和不用当前元素,哪一种情况为true,最终就为true...原创 2020-10-11 18:06:24 · 184 阅读 · 0 评论 -
leetcode#347-堆排序练习
vector<int> topKFrequent(vector<int>& nums, int k){ unordered_map<int,int> map; for(int i=0;i<nums.size();i++){ map[nums[i]]++; } priority_queue<pair<int,int...原创 2020-09-27 10:27:45 · 217 阅读 · 0 评论 -
leetcode#92-反转链表2
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if.原创 2020-09-13 16:42:51 · 89 阅读 · 0 评论 -
汉诺塔问题-递归
class Solution {public: void hanota(vector<int>& A, vector<int>& B, vector<int>& C) { if(A.size()<=0) return; int n=A.size(); move(n,A,B,C); return; } void move(int n,vector<.原创 2020-09-05 19:23:39 · 149 阅读 · 0 评论 -
数组-leetcode#31-下一个排列
class Solution {public: void nextPermutation(vector<int>& nums) { if(nums.empty()) return; int i=nums.size()-2; while(i>=0){ if(nums[i]<nums[i+1]) break; i--; } if(i>=.原创 2020-09-03 14:25:39 · 89 阅读 · 0 评论 -
数组-leetcode#27-原地移出元素
class Solution {public: int removeElement(vector<int>& nums, int val) { if(nums.empty()||nums.size()==0) return 0; int i=0;//i之前都排好了, for(int j=0;j<nums.size();j++){//移动j,把不等于val的元素放到i中,i++ if(nums[j]!=val){ .原创 2020-09-03 14:06:32 · 80 阅读 · 0 评论 -
leetcode#26-删除排序数组中的重复项
class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.empty()||nums.size()==0) return 0; int i=0; int j=0; while(i<nums.size()){ if(nums[i]==nums[j]) i++;//重复元素跳过 else{ .原创 2020-09-03 14:01:58 · 85 阅读 · 0 评论 -
leetcode#20-有效的括号
class Solution {public: bool isValid(string s) { if(s.length()<=0) return true; stack<char> save; if(s[0]=='('||s[0]=='['||s[0]=='{') save.push(s[0]); else return false; int i=1; while(i<s.length()){ i.原创 2020-09-03 12:36:11 · 93 阅读 · 0 评论 -
leetcode#144-二叉树的前序遍历
class Solution {public: vector<int> preorderTraversal(TreeNode* root) { vector<int> res; if(root==NULL) return res; digui(res,root); return res; } void digui(vector<int> & res,TreeNode *.原创 2020-08-29 21:51:05 · 94 阅读 · 0 评论 -
leetcode#138-复杂链表的复制
class Solution {public: Node* copyRandomList(Node* head) { if(head==NULL) return head; Node * p=head; //第一阶段,开辟空间,复制节点 while(p){ Node * tmp=new Node(p->val); tmp->next = p->next; .原创 2020-08-29 21:08:19 · 110 阅读 · 0 评论 -
leetcode#130-被围绕的区域
class Solution {public: void solve(vector<vector<char>>& board) { if(board.size()<=0) return; int m = board.size();//行 int n = board[0].size();//列 for(int i=0;i<n;i++){ dfs(board,0,i);.原创 2020-08-29 16:20:38 · 105 阅读 · 0 评论 -
leetcode#129-求根到叶子节点之和
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: vector<int> res; i..原创 2020-08-29 15:35:18 · 105 阅读 · 0 评论 -
leetcode#127-字符串的最短转换序列
class Solution {public: int ladderLength(string beginWord, string endWord, vector<string>& wordList) { unordered_set<string> dict(wordList.begin(), wordList.end());//把字典中的字符变成hash_set加速查找 unordered_map<string, int&g.原创 2020-08-29 15:08:50 · 361 阅读 · 0 评论 -
leetcode#147-链表的插入排序
class Solution {public: ListNode* insertionSortList(ListNode* head) { if(head==NULL || head->next==NULL) return head; ListNode * dummy=new ListNode(INT_MIN); dummy->next = head; ListNode * pre = dummy; L.原创 2020-08-25 00:11:11 · 86 阅读 · 0 评论 -
leetcode#125-验证回文串
class Solution {public: bool isPalindrome(string s) { if(s.length()<=1) return true; int begin = 0; int end = s.length()-1; while(begin<end){ while(begin<end && !((s[begin]>='a' &&am.原创 2020-08-21 09:55:54 · 80 阅读 · 0 评论 -
leetcode#143-重排链表
class Solution {public: void reorderList(ListNode* head) { if(head==NULL) return; int n=0; ListNode * p = head; stack<ListNode *> s; while(p!=NULL){ s.push(p); p = p->next; n++; } //n.原创 2020-08-21 01:10:01 · 84 阅读 · 0 评论 -
leetcode#57-插入区间
class Solution {public: vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) { vector<vector<int>> res; if(newInterval.size()<=0) return intervals;.原创 2020-08-20 23:57:06 · 124 阅读 · 0 评论 -
leetcode#61-旋转链表
ListNode* rotateRight(ListNode* head, int k) { if(k<=0||head==NULL) return head; int n=0; ListNode * p = head; while(p!=NULL){ n++; p = p->next; } k = k%n; if(k==0) retu.原创 2020-08-19 20:26:35 · 83 阅读 · 0 评论 -
矩阵-单词搜索
class Solution {public: bool exist(vector<vector<char>>& board, string word) { if(board.size()<=0) return false; int m = board.size()-1; int n = board[0].size()-1; vector<vector<bool>> vis.原创 2020-08-19 17:41:00 · 201 阅读 · 0 评论 -
矩阵-leetcode#54-螺旋打印矩阵
class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; if(matrix.size()<=0) return res; int m = matrix.size()-1; int n = matrix[0].size()-1; .原创 2020-08-16 22:52:11 · 134 阅读 · 0 评论 -
MATH-leetcode#50-次幂计算-使用二分法
class Solution {public: double myPow(double x, int n) {//写一个递归函数,每次n/2次方,再平方, return half(x,n); } double half(double x,int n){ if(n==0) return 1.0; double half_n = half(x,abs(n)/2); half_n = n%2==0?half_n*half_.原创 2020-08-16 22:26:43 · 200 阅读 · 0 评论 -
数组-leetcode#34-二分查找确定左右边界
class Solution {public: vector<int> searchRange(vector<int>& nums, int target) { vector<int> res; if(nums.size()<=0) {res.push_back(-1);res.push_back(-1);return res;} int left = leftsearch(nums,targ.原创 2020-08-16 21:51:59 · 425 阅读 · 0 评论 -
链表-leetcode#24-链表中节点两两交换
class Solution {public: ListNode* swapPairs(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode * p1=head; ListNode * p2=head->next; ListNode * newhead = p2; ListNode * pre = NULL; .原创 2020-08-15 18:51:12 · 143 阅读 · 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(next.原创 2020-08-15 18:07:53 · 111 阅读 · 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(next.原创 2020-08-15 17:39:26 · 140 阅读 · 0 评论 -
分治算法-leetcode#22-生成n个括号对
class Solution {public: vector<string> generateParenthesis(int n) { vector<string> res; if(n<=0) return res; generate(res,n); return res; } void generate(vector<string> & res,int.原创 2020-08-15 17:17:23 · 312 阅读 · 0 评论 -
数组-leetcode#18-四个数求和等于target的所有组合
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> res; if(nums.size()<=1) return res; sort(nums.begin(),nums.end()); for(int i.原创 2020-08-15 15:32:33 · 384 阅读 · 0 评论 -
数组-leetcode#16-找出三个数之和与目标最接近的组合
class Solution {public: int threeSumClosest(vector<int>& nums, int target) { if(nums.size()<=0) return 0; sort(nums.begin(),nums.end()); int res=nums[0]+nums[1]+nums[2]; for(int i=0;i<nums.size();i++){.原创 2020-08-15 14:57:14 · 969 阅读 · 0 评论 -
数组-leetcode#15-找出三个数之和等于0的所有不重复序列
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; if(nums.size()<=0) return res; sort(nums.begin(),nums.end());//先排序 for(int i=0;i&l.原创 2020-08-15 12:13:18 · 462 阅读 · 0 评论 -
数组-leetcode#4-两个升序数组的中位数
class Solution {public: double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) { int m = nums1.size(); int n = nums2.size(); if((m+n)%2==1) return find_k(nums1,nums2,(m+n+1)/2); .原创 2020-07-28 19:29:32 · 249 阅读 · 0 评论 -
双指针-leetcode#11-盛水最大容器
class Solution {public: int maxArea(vector<int>& height) {//双指针 if(height.size()<=1) return 0; int max_area=0; int left = 0,right = height.size()-1; while(left<right){ int cur_area = min(hei.原创 2020-07-28 16:20:37 · 135 阅读 · 0 评论 -
贪心算法-leetcode#45-最少跳跃步数
class Solution {public: int jump(vector<int>& nums) { //每一跳选择,下一条可达位置最远的那一个。 if(nums.size()==0) return 0; int step=0; for(int i=0;i<nums.size();i++){ nums[i]+=i;//当前i可达的最大下标 } int i=0; while(i<nums..原创 2020-07-28 15:47:21 · 786 阅读 · 0 评论 -
数组-leetcode#55-跳跃游戏
class Solution {public: unordered_map<int,bool> map; bool canJump(vector<int>& nums) { if(nums.empty()) return true; int max_len=0; for(int i=0;i<nums.size();i++){ if(i<=max_len){//只有当前可达最.原创 2020-07-28 13:52:23 · 110 阅读 · 0 评论 -
数组-leetcode#275-最高引用次数H
class Solution {public: int hIndex(vector<int>& citations) { if(citations.empty()) return 0; int n = citations.size(); int h= 0; sort(citations.begin(),citations.end()); for(int i=0;i<n;i++){//遍历数组.原创 2020-07-28 12:17:21 · 141 阅读 · 0 评论 -
数组-leetcode#118-杨辉三角
class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> res; if(numRows<=0) return res; vector<int> one={1}; res.push_back(one); for(int i=2;i&l.原创 2020-07-28 11:11:37 · 79 阅读 · 0 评论 -
数组-leetcode#134-加油站
int canCompleteCircuit(vector<int>& gas, vector<int>& cost) { if(gas.empty()||cost.empty()) return -1; if(check(gas,cost)) return 0; if(gas.size()!=cost.size()) return -1; int len = gas.size(); ..原创 2020-07-28 10:36:59 · 95 阅读 · 0 评论 -
数组-leetcode#41-缺失的第一个正数
class Solution {public: int firstMissingPositive(vector<int>& nums) { if(nums.empty()) return 1; unordered_map<int,bool> map; for(int i=0;i<nums.size();i++){ map[nums[i]]=true; } .原创 2020-07-27 23:38:31 · 107 阅读 · 0 评论 -
数组-leetcode#189-旋转数组
class Solution {public: void rotate(vector<int>& nums, int k) { if(k%nums.size()==0||nums.empty()) return; k = k%nums.size(); vector<int> nums_new(nums); for(int i=nums.size()-k,j=0;i<nums.size().原创 2020-07-27 22:43:31 · 138 阅读 · 0 评论 -
数组-leetcode#80-删除数组中重复两次以上的数字
class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.empty()||nums.size()==0) return 0; int i=0;//i用来标记当前已经排好的位置 int count = 0;//用于计数, for(int j=1;j<nums.size();j++){ if(nu.原创 2020-07-27 22:21:19 · 253 阅读 · 0 评论