
leetcode
文章平均质量分 79
werweqg
每天进步一点点。
展开
-
球球-redis
https://blog.youkuaiyun.com/Butterfly_resting/article/details/89668661原创 2020-07-20 19:20:56 · 212 阅读 · 0 评论 -
球球速刷LC-字典树
基本概念https://www.cxyxiaowu.com/2425.html原创 2020-07-03 18:58:45 · 321 阅读 · 0 评论 -
球球速刷LC之二叉树 二叉搜索树 三轮
二叉树二叉树是典型的迭代结构。是平衡数组访问能力与链表增删改能力的产物。二叉树的访问递归访问比较简单,无非是访问当前节点与左右子树的顺序不同。非递归访问,需要使用栈作为辅助。<1>对于中序遍历,由于左子树需要最先访问,因此对于任何节点,若其有左子树,需要一路向左,直至最左侧叶子节点,此时访问当前节点,并将其右子树作为当前节点,重复以上过程。<2>对于前序遍历,类似于中序遍历,不同是将当前节点访问后从栈中弹出,并分别将右子树和左子树入栈,从而实现当前节点->左子树-&原创 2020-07-01 18:38:37 · 430 阅读 · 1 评论 -
球球速刷LC--序列DP 三轮
最长无重复子串记录每种字符最近一次出现的位置dp[i]表示以第i元素结尾的最长无重复子串,则dp[i]=min(dp[i-1]+1,i-last_pos); //其中last_pos为第i元素上次出现的位置class Solution {public: int lengthOfLongestSubstring(string s) { vector<int>character_pos(256,-1); //dp[i] 以第i个字符结尾的最长长度原创 2020-06-19 19:14:17 · 319 阅读 · 1 评论 -
球球速刷LC--位操作 二轮
异或唯一数字所有数字异或后,出现两次的数字会变成0。结果就是只出现一次的那个数字int singleNumber(int A[], int n) { int result = A[0]; for(int i =1 ; i < n ;++i) { result = result^A[i]; } return result;}唯一数2把数字当成一个32bit的数组,记录每个bit上1总的原创 2020-06-19 18:25:23 · 378 阅读 · 2 评论 -
球球速刷LC-排序
快速排序快排是典型的减而治之策略。快排的难点在“分”这个步骤。即将整个数组划分为<=pivot 和>pivot两大块,并返回pivot的位置。在分的过程中,注意边界问题。参考以下文章学习快排的细节处理。快排的写法使用快排解决以下问题:题目:排序数组归并排序归并排序的策略是分而治之,及将待排序序列一分为二,各自排序后再合并。它与快速排序的区别是,快排是先划分为左右两边,右边一定>=左边,再各自排序。因此最后无需合并。而归并排序再划分时只是简单的划分为两堆,不存在大小关系,所以原创 2020-06-19 16:32:30 · 407 阅读 · 1 评论 -
球球速刷LC--贪心
贪心的思路很简单在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解,也就是当前最贪婪的解。跳跃游戏1维护一个当前所能到达的窗口,并在这个窗口内遍历每个点,看能达到的最远距离farest。从而将窗口更新到当前窗口[end+1,farest]。直到当前能到达窗口>=n bool canJump(vector<int>& nums) { if(nums.size()<=1) re原创 2020-06-19 11:59:59 · 289 阅读 · 1 评论 -
球球速刷LC--数学类 二轮
2 两数相加注意进位。 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { auto op1=l1,op2=l2; ListNode ret; ListNode*psum=&ret; int jinwei=0; while(op1 || op2 || jinwei){ int add1 = op1=原创 2020-06-17 22:15:02 · 289 阅读 · 0 评论 -
球球速刷LC--BFS DFS 二轮
二叉树里已经大量使用了DFS,BFS,二叉树的前序遍历,中序遍历 后序遍历就是DFS,层序遍历就是BFS。对于二叉树这种具有单向分层结构,进行DFS BFS时无需担心会重复访问,但是对于无向图或者有向有环图等结构,需要使用辅助数据结构来记录当前节点是否已经访问过。岛屿数目class Solution { int m=0; int n=0; //DFS解法 void mark_island_dfs(int i,int j,vector<vector<ch原创 2020-06-13 17:33:15 · 421 阅读 · 0 评论 -
球球速刷LC之双指针 二轮
无序两数之和对于当前num[i],要找的是target-num[i],可利用集合逐渐构建搜索集合class Solution {public: //逐渐构造搜索集合 VS 初始时即构造完全的搜索集 vector<int> twoSum(vector<int>& nums, int target) { vector<int> ret; if(nums.size()<=1) return ret原创 2020-06-10 23:43:47 · 235 阅读 · 2 评论 -
球球速刷LC之数组 三轮
旋转矩阵技巧是先将矩阵按对角线交换,在翻转每一行void swap(int &a , int &b){ int temp = a; a =b; b = temp;}void reverse(vector<int>&array){ int i = 0; int j =array.size()-1; while(i < j) { swap(array[i] , array[j]);原创 2020-06-10 23:13:45 · 228 阅读 · 2 评论 -
球球速刷LC-回溯 三轮
阅读文章回溯解题框架组合问题求子集1class Solution { vector<vector<int>>result; void backTrack(vector<int>&can,vector<int>&curr_set,int start) { result.push_back(curr_set); //代表一轮选择,其选择第一个数为start原创 2020-06-09 23:27:54 · 411 阅读 · 1 评论 -
球球速刷LC-- 链表 二轮
1.链表成环即成环位置检测思路:利用快慢指针判断是否最终相遇141 Linked List Cycleclass Solution {public: bool hasCycle(ListNode *head) { if(head==NULL || head->next==NULL ||head->next->next==NULL) return false; auto p1=head; auto p2=hea原创 2020-06-08 21:58:33 · 281 阅读 · 1 评论 -
球球速刷LC-数据结构-优先级队列、单调队列 二轮
一、基本性质基础性质参考文章是满二叉树对于大顶堆,任意节点均>两子节点对于小顶堆,任意节点<两字节点利用二叉堆即可形成优先级队列。基本操作包括2个,节点的下沉和上浮合并多个有序序列将多个链表的表头加入小顶堆优先级队列。再依次从队列中取出top元素构建新链表,若该top元素有后继,则将后继加入优先级队列中。class Solution {public: ListNode* mergeKLists(vector<ListNode*>& lists)原创 2020-06-02 23:26:28 · 330 阅读 · 0 评论 -
球球速刷LC之数据结构--栈 单调栈 三轮
栈的特性是先入后出,栈的主要题型包括常规栈和单调栈。常规栈应用简化路径使用栈缓存当前到达的路径,遇到"…"弹出栈顶,返回上级目录。注意对最终栈为空处理 string simplifyPath(string path) { if(path.empty()) return ""; string curr_path; stack<string>st; for(int i=0;i<path.size()原创 2020-06-01 19:53:17 · 392 阅读 · 1 评论 -
球球速刷LC之DP--背包问题 三轮
背包DP背包问题分为01背包与完全背包01背包,共有N个物体,每个物体只有一个,装入给定背包中完全背包,共有N种物体,每个物体数量不限,装入给定背包中01背包重点:1.思路:对每个物体i,在剩余容量j时选择装与不装2.注意一维情况时的容量倒序遍历问题定义:给定容量V的背包,和体积分别为{Ci}(i=1...N)的N个物体,每个物体价值为{Wi}(i=1..N).求使得背包价值最大的装法。状态:对于每个物体i,在背包容量为j时,背包价值为DP(i,j)选择: 如果当前背包体积j&原创 2020-05-29 23:22:26 · 345 阅读 · 1 评论 -
球球速刷LC之DP问题 三轮
DP的本质是巧妙定义状态,并找到状态的递推关系一、经典1.最长递增子序列Input: [10,9,2,5,3,7,101,18]Output: 4 Explanation: The longest increasing subsequence is [2,3,7,101], therefore the length is 4. 最优解法###状态定义###数组tail,tail[k]代表长度为k+1的递增子序列中末尾元素最小的那个子序列的尾元素。易得:tail数组是递增数组,因此对于一个原创 2020-05-27 17:40:55 · 305 阅读 · 0 评论 -
球球速刷LC之二分查找 二轮
模板<1>使用左闭右开区间1.初始化时也要左开右闭2.从而循环条件是l<r ,退出时lr,不必纠结返回l还是r<2>由于左区间为闭区间,因此首先写排除mid元素向右边收缩的逻辑分支非常时候找到条件为第一个…的问题如:第一个target : while(l<r) int mid=(l+r)/2; if(nums[...原创 2020-04-29 16:40:50 · 372 阅读 · 0 评论