Leetcode
gerayking
默默努力,享受过程,不问前程
展开
-
LeetCode第192场周赛
重新排列数组 思路 代码实现 每次push进入答案i和i+n个然后直接返回 class Solution { public: vector<int> shuffle(vector<int>& nums, int n) { vector<int>res; for(int i=0;i<n;i++){ res.push_back(nums[i]); res.push_back(原创 2020-06-07 12:42:25 · 148 阅读 · 0 评论 -
287. 寻找重复数-快慢指针
287. 寻找重复数 思路 快慢指针 一个图,快指针跑两步,满指针跑一步,如果遇到相同的节点肯定有环。 有环如何找到起点?把慢指针放到开头,快指针也降速,一步一步跑,再次遇到相同的就是答案。 证明如下 x 是环的起点 y 是相遇点 L是环长度 c是环长度减去y 得到 2(x+y)=x+y+kL2(x+y)=x+y+kL2(x+y)=x+y+kL x=(k−1)L+(L−y)=(k−1)L+cx=(k-1)L + (L-y)=(k-1)L+cx=(k−1)L+(L−y)=(k−1)L+c 所以我们把sl原创 2020-05-26 11:41:55 · 175 阅读 · 1 评论 -
146. LRU缓存机制
146. LRU缓存机制 思路 考虑使用双向链表+哈希,插入和更新直接移动到头结点即可 struct DoubleLink { int key, value; DoubleLink* prev; DoubleLink* next; DoubleLink(): key(0), value(0), prev(nullptr), next(nullptr) {} DoubleLink(int _key, int _value): key(_key), value(_valu原创 2020-05-25 17:22:09 · 102 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
思路 考虑使用辅助栈,做到O(n)的复杂度 /** * 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: TreeNode*原创 2020-05-22 12:20:58 · 107 阅读 · 0 评论 -
1371. 每个元音包含偶数次的最长子字符串
思路 就是用5位数字存放a,e,i,o,u状态00000~11111,然后每次遇到a,e,i,o,u就分别修改一下状态,两个位置状态相同的时候,这两个位置的差就是答案。 class Solution { public: int findTheLongestSubstring(string s) { int ans = 0,statu = 0,n=s.size(); vector<int>pos(1<<5,-1); pos[0]=原创 2020-05-20 01:16:45 · 98 阅读 · 0 评论 -
leetcode-680. 验证回文字符串 Ⅱ
思路 因为只能删除一个,所以采用双指针,找到第一个不一样的地方,然后考虑删除左边还是右边即可 class Solution { public: bool validPalindrome(string s) { if(s.size()==1)return 1; int l=0,r=s.size()-1; while(l<=r){ if(s[l]!=s[r]){ int ll = l++;原创 2020-05-19 11:32:47 · 140 阅读 · 0 评论 -
LeetCode每日一题20200518
乘积最大子数组 乘积最大子数组 思路 考虑使用DP,设DP[i]为前i个的最大乘积,很容易的到转移方程 dp[i]=max(dp[i−1]∗nums[i],ai)dp[i]=max(dp[i-1]*nums[i],a_i)dp[i]=max(dp[i−1]∗nums[i],ai) 但是显然,这样是不对的,因为会出现负数的情况[5,2,-3,4-3]这样, dp[4]的状态实际是[52]但是dp[5]需要从[52*-3*4]转移来,所以我们需要一个辅助的DP数组,minF[i]表示前i个的最小值,然后得到的原创 2020-05-18 11:16:25 · 156 阅读 · 0 评论