
leetcode题解
leetcode做题记录
不停---
吹皱一池春水
buting.site
展开
-
217--存在重复元素
class Solution {public: bool containsDuplicate(vector<int>& nums) { unordered_set<int> storage; for(int i=0;i<nums.size();i++) { if(storage.count(nums[i])) return false;原创 2020-07-01 13:38:23 · 130 阅读 · 0 评论 -
189--旋转数组
class Solution {public: void rotate(vector<int>& nums, int k) { k%=nums.size(); reverse(nums,0,nums.size()-1); reverse(nums,0,k-1); reverse(nums,k,nums.size()-1); } void reverse(vector<int&原创 2020-07-01 13:32:00 · 117 阅读 · 0 评论 -
数组--122 买卖股票的最佳时机||
class Solution {public: int maxProfit(vector<int>& prices) { int n=prices.size(); int dp[n][2]; dp[0][0]=0; dp[0][1]=-prices[0]; for(int i=1;i<n;i++) { dp[i][0]=max(dp[i-1]原创 2020-06-30 22:26:01 · 126 阅读 · 0 评论 -
数组 26.删除排序数组中的重复项
#include<vector>using namespace std;class Solution {public: int removeDuplicates(vector<int>& nums) { if(nums.size()==0) return 0; int i=0,j=1; for(;j<nums.size();j++) {原创 2020-06-30 18:12:41 · 178 阅读 · 0 评论 -
371 .两整数之和
371 .两整数之和地址:https://leetcode-cn.com/problems/sum-of-two-integers/题目:不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例:示例1: 输入: a = 1, b = 2 输出: 3思路:位运算观察位运算中的加法0+0=00+1=11+0=01+1=0(进位1)可以发现,在位运算中的加法(不考虑进位1)就是异或运算的结果。但是仅仅有异或运算是不够的,我们还需要知道,何时发生了进位,这原创 2020-10-12 15:38:05 · 307 阅读 · 1 评论 -
leetcode 5 最长回文子串
leetcode 5 最长回文子串题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"思路1: 动态规划假设字符串大小大于2,对于一个子串而言,如果它是回文串,则如果i-1,j+1相等,【i-1,j+1】就会是回文字符串,否则不是。我们可以得到状态转移方程p(i,j)=p(i+1原创 2020-09-15 21:00:41 · 189 阅读 · 0 评论 -
209长度最小的子数组
#include<vector>using namespace std;class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int res=INT32_MAX; int start=0,end=0; if(nums.size()==0) return 0; int su原创 2020-06-28 15:17:20 · 168 阅读 · 0 评论 -
leetcode 每日一题 --- 最接近三数之和
1.题目:方法:双指针加枚举如果做过15 三数之和应该很容易做出#include<iostream>#include<vector>#include<algorithm>#include<math.h>using namespace std;class Solution {public: int threeSumClosest(vector<int>& nums, int target) {原创 2020-06-24 15:17:54 · 161 阅读 · 0 评论 -
leetcode 124
class Solution {public: int max_sum=INT32_MIN; int maxpath(TreeNode* root) { if(root==NULL) return 0; int leftvalue=max(0,maxpath(root->left)); int rightvalue=max(0,maxpath(root->right)); int p原创 2020-06-21 20:52:22 · 171 阅读 · 0 评论 -
309---最佳买卖股票的时机(含冷冻期)
class Solution {public: int maxProfit(vector<int>& prices) { int dp[100][2]; // zero means do not hold the share // one means hold the share int length=prices.size(); if(length==1) ret原创 2020-06-18 00:16:26 · 127 阅读 · 0 评论 -
48--旋转图像
class Solution {public: void rotate(vector<vector<int>>& matrix) { int l1=matrix.size(); //transpose matrix for(int i=0;i<l1;i++) { for(int j=i;j<l1;j++) {原创 2020-06-17 19:49:06 · 144 阅读 · 0 评论 -
每日一题---1014 最佳观光组合
class Solution {public: int maxScoreSightseeingPair(vector<int>& A) { int highestscore=0; int mx=0; for(int j=0;j<A.size();j++) { highestscore=max(highestscore,mx+A[j]-j); mx=ma原创 2020-06-17 15:18:30 · 198 阅读 · 0 评论 -
每日一题 6.12 三数之和
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 =原创 2020-06-12 23:29:25 · 147 阅读 · 0 评论 -
每日一题 6.10
class Solution {public: bool isPalindrome(int x) { if(x<0) return false; else if(x==0) return true; else { string temp=to_string(x); int left=0,right=temp.size()-1原创 2020-06-10 11:59:15 · 187 阅读 · 0 评论 -
每日一题---990 等式方程的可满足性 并查集
class UnionFind {private: vector<int> parent;public: UnionFind() { parent.resize(26); iota(parent.begin(), parent.end(), 0); } int find(int index) { if (index == parent[index]) { return index;原创 2020-06-08 18:44:49 · 259 阅读 · 0 评论 -
leetcode 494 目标和 动态规划
public class Solution { public int findTargetSumWays(int[] nums, int S) { int[][] dp = new int[nums.length][2001]; dp[0][nums[0] + 1000] = 1; dp[0][-nums[0] + 1000] += 1; for (int i = 1; i < nums.length; i++) {原创 2020-06-06 12:48:15 · 272 阅读 · 0 评论 -
每日一题 6.5螺旋矩阵
#include<vector>using namespace std;class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector <int> res; if(matrix.empty()) return res; int rl = 0, rh = matrix.siz原创 2020-06-05 20:36:09 · 176 阅读 · 0 评论 -
6.3 leetcode 每日一题
class Solution {public: double new21Game(int N, int K, int W) { if (K == 0) { return 1.0; } vector<double> dp(K + W); for (int i = K; i <= N && i < K + W; i++) { dp[i] = 1.0;原创 2020-06-03 13:24:46 · 120 阅读 · 0 评论 -
leetcode----回文子序列相关
1.leetcode 516 最长回文子序列2.leetcode 1143 最长公共子序列3.leetcode 1312 让字符串成为回文串的最少插入次数原创 2020-06-01 22:51:33 · 158 阅读 · 0 评论 -
leetcode 1312 让字符串成为回文串的最少串的最少插入次数
class Solution {public: int minInsertions(string s) { int n = s.size(); string t(s.rbegin(), s.rend()); vector<vector<int>> dp(n + 1, vector<int>(n + 1)); for (int i = 1; i <= n; ++i) {原创 2020-06-01 22:51:06 · 288 阅读 · 0 评论 -
1143 最长公共子序列
class Solution {public: int longestCommonSubsequence(string text1, string text2) { int len1=text1.size(); int len2=text2.size(); int maxlen=max(len1,len2); int dp[maxlen][maxlen]; memset(dp,0,sizeof(dp原创 2020-06-01 22:34:41 · 136 阅读 · 0 评论 -
leetcode 516 最长回文子序列
class Solution {public: int longestPalindromeSubseq(string s) { int size=s.size(); int dp[size][size]; memset(dp,0,sizeof(dp)); for(int i=size-1;i>=0;i--) { dp[i][i]=1; for(int j=原创 2020-06-01 22:34:27 · 212 阅读 · 0 评论 -
leetcode: 1.两数之和
1.给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]1.1暴力解法:class Solution {public: vector<int> res; vecto原创 2020-05-31 15:17:09 · 103 阅读 · 0 评论 -
leetcode ---- 三数之和
1.题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。暴力解法:(超出时间限制)#include<vector>#include<iostream>#include<algorithm>using namespace std;class Solution {public: bool equ原创 2020-05-31 14:13:56 · 147 阅读 · 0 评论 -
leetcode 17 电话号码的字母组合 medium 回溯+递归
class Solution {public: unordered_map<char,string> dmap = {{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"}, {'6',"mno"},{'7',"qprs"},{'8',"tuv"},{'9',"wxyz"}}; vector<string> letterCombinations(string digits) { in原创 2020-05-30 21:20:22 · 150 阅读 · 0 评论 -
39-----组合总和 回溯法
class Solution {public: vector<vector<int>> res; void combinationsum(vector<int>&candidates ,int start,int target,vector<int> t) { if(target==0) { res.push_back(t); return ;原创 2020-05-28 17:11:51 · 123 阅读 · 1 评论 -
581----最短无序连续数组
class Solution {public: int findUnsortedSubarray(vector<int>& nums) { int size=nums.size(); vector<int> cop(size); copy(nums.begin(),nums.end(),cop.begin()); sort(cop.begin(),cop.end()); int原创 2020-05-24 14:42:13 · 155 阅读 · 0 评论 -
234-----回文链表
一:在首先看到题目时,不难想到暴力解法。(1):利用额外o(n)的空间,将链表的值copy到数组中,再判断该数组是否为回文数组。但这与我们题目所要求的o(1)的额外空间不符合。倘若这是一个双向链表,那么很好判断,一个指针指向head,另一个指向末尾,一个从前往后,一个反之,与数组一样的判断放法,但这是一个单向链表,我们如何解决呢?不难想到,只要将数组的后半部分进行反转,就能够实现我们的目标。反转链表代码class Solution {public: ListNode* reverseL原创 2020-05-24 14:26:48 · 98 阅读 · 0 评论 -
每日一题-----680验证回文字串
class Solution {public: bool validPalindrome(string s) { int left=0,right=s.size()-1; int tag=0; int temp1=0,temp2=0; while (left<=right) { if(s[left]==s[right]) {原创 2020-05-19 12:58:25 · 115 阅读 · 0 评论 -
160---相交链表 对的人总会相逢
class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { ListNode* a=headA; ListNode* b=headB; while (a!=b) { if(a) a=a->next; else a=headB; i原创 2020-05-17 23:38:24 · 110 阅读 · 0 评论 -
279---完全平方数
class Solution {public: int numSquares(int n) { int dp[n+1]; dp[0]=0; for(int i=1;i<n+1;i++) { int mins=INT32_MAX; for(int j=1;j*j<=i;j++) { mins=min原创 2020-05-16 21:07:24 · 177 阅读 · 0 评论 -
347---前k个高频元素
class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { unordered_map<int,int> record; //(元素,频率) //遍历数组,录入频率 for(int i = 0; i < nums.size(); i++) { record[原创 2020-05-16 19:11:04 · 172 阅读 · 0 评论 -
每日一题:560 和为K的子数组
class Solution {public: int subarraySum(vector<int>& nums, int k) { int res=0; for(int i=0;i<nums.size();i++) { int sum=0; for(int j=i;j>=0;j--) {原创 2020-05-15 17:09:01 · 179 阅读 · 0 评论 -
leetcode -- 739每日温度
class Solution {public: vector<int> dailyTemperatures(vector<int>& T) { int len=T.size(); vector<int> res(len); res[len-1]=0; for(int i=len-2;i>=0;i--) { for(int j=i+1;j原创 2020-05-14 13:20:16 · 114 阅读 · 0 评论 -
leetcode---647 回文子串
class Solution {public: bool isReverse(string s,int first,int last) { while (first<=last) { if(s[first]!=s[last]) return false; first++; last--; } return true;原创 2020-05-14 12:53:54 · 117 阅读 · 0 评论 -
96---不同的二叉树
class Solution {public: int numTrees(int n) { int dp[1000]; dp[0]=0,dp[1]=1,dp[2]=2,dp[3]=5; if(n<=3) return dp[n]; dp[1]=0; for(int i=4;i<=n;i++) { for(int j=0;j<=i原创 2020-05-12 14:21:27 · 223 阅读 · 0 评论 -
208----前缀树
class Trie {private: bool isEnd; Trie* next[26];public: Trie() { isEnd = false; memset(next, 0, sizeof(next)); } void insert(string word) { Trie* node = this; for (char c : word) { if (原创 2020-05-12 13:54:10 · 117 阅读 · 0 评论 -
每日一题--最小栈
1.线性时间寻找 class MinStack {public: /** initialize your data structure here. */ MinStack() { } void push(int x) { size[cur]=x; cur++; } void pop() { min=INT32_MAX; cu原创 2020-05-12 11:23:31 · 138 阅读 · 0 评论 -
leetcode --每日一题 50 pow(x,n) 快速幂
class Solution {public: double myPow(double x, int n) { if(n==0) return 1.00000; long long n1=n; double res=1.0; if(n>0) { res=qucikexp(x,n1); return res; }原创 2020-05-11 15:20:53 · 173 阅读 · 0 评论 -
leetcode --- 392 判断子序列
class Solution {public: bool isSubsequence(string s, string t) { int left=0; for(int i=0;i<t.size();i++) { if(left==s.size()) return true; if(t[i]==s[left]) left++原创 2020-05-10 14:37:30 · 126 阅读 · 0 评论