![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
力扣刷题
文章平均质量分 73
力扣刷题-148
杰尼鬼头大
这个作者很懒,什么都没留下…
展开
-
力扣刷题笔记:链表(21)
141. 环形链表1、用快慢指针,快指针移动两格,慢指针移动一格,如果快指针能追上慢指针,则存在环。2、快指针起始值大于慢指针一格,方便进入循环。3、快指针先判断有没有到表尾再移动,慢指针不用判断class Solution {public: bool hasCycle(ListNode *head) { if(head==NULL||head->next==NULL) return false; ListNode* first=head; ListNode*原创 2021-01-05 23:04:45 · 340 阅读 · 0 评论 -
力扣刷题笔记:二叉树(16)
94. 二叉树的中序遍历1、中序遍历包含递归和非递归两种做法2、递归方法包含一个隐式栈,所以也可以用栈的方法实现遍历。class Solution {public: vector<int> ans; vector<int> inorderTraversal(TreeNode* root) { dfs(root); return ans; } void dfs(TreeNode* root){原创 2021-01-06 23:37:15 · 246 阅读 · 0 评论 -
力扣刷题笔记:二叉树遍历(9)
144. 二叉树的前序遍历(深搜、栈)递归:class Solution {public: vector<int> ans; vector<int> preorderTraversal(TreeNode* root) { dfs(root); return ans; } void dfs(TreeNode* root){ if(root==NULL) return; ans.push原创 2021-08-16 00:18:25 · 245 阅读 · 0 评论 -
力扣刷题笔记:数组(13)
154. 寻找旋转排序数组中的最小值 II int minArray(vector<int>& numbers) { int left=0,right=numbers.size()-1; while (left<right) { int mid=left+(right-left)/2; if (numbers[mid]<numbers[right]) right=mid;原创 2021-07-03 20:31:39 · 288 阅读 · 0 评论 -
力扣刷题笔记:排序(12)
常见三大排序1)快速排序1、快排随机选取基准值pivot,强转随机时间为unsigned类型作为srand种子。2、划分将基准值与末尾交换,设基准值为左值l,从左往右判断小于nums[r]则与nums[l]交换3、交换nums[r]与nums[l],将原基准值换回新基准值位置l,返回l4、左边left为l,右边right为r,进行第一轮划分后进行左右递归。快速排序的4种优化1、随机选取基准值或使用头尾中三数取中选取基准值,提升平均性能2、当范围在5-20小范围间选择插入排序,提升算法效率3原创 2021-08-14 22:23:21 · 265 阅读 · 0 评论 -
力扣刷题笔记:二分查找(11)
33. 搜索旋转排序数组(二分查找)先判断中间点,再判断左右是否为有序数组 int search(vector<int>& nums, int target) { int n = (int)nums.size(); if (!n) return -1; if (n == 1) return nums[0] == target ? 0 : -1; int l = 0原创 2021-08-15 10:48:04 · 198 阅读 · 0 评论 -
力扣刷题笔记:字符串(11)
344. 反转字符串 void reverseString(vector<char>& s) { int n = s.size(); for (int left = 0, right = n - 1; left < right; ++left, --right) { swap(s[left], s[right]); } }原创 2021-07-03 20:56:29 · 252 阅读 · 0 评论 -
力扣刷题笔记:动态规划(13)
70. 爬楼梯1、本题不能用递归,楼梯过多会超出时间限制,用动态规划2、用first和second代替动规状态数组,存储前两步楼梯的各自方案数之和3、当前等于first+second,再更新first和second int climbStairs(int n) { if(n==0) return 1; else if (n==1) return 1; else if (n==2) return 2; int first=1,seco原创 2021-07-11 13:39:27 · 261 阅读 · 0 评论 -
力扣刷题笔记:最长子串、子序列(10)
3. 最长无重复字符的子串(滑动窗口)1、使用滑动窗口法,首先尾指针加1,表示加入一个元素,然后更新最长子串长度。2、判断增加元素后原窗口是否有重复元素,找到第一个重复元素,更改首指针到该元素后。 int lengthOfLongestSubstring(string s) { int start = 0, end = 0, length = 0, num = 0; while (end < s.size()){ end++;length++; num = max(nu原创 2021-08-16 23:14:03 · 265 阅读 · 0 评论 -
力扣刷题笔记:回溯、广搜、深搜、矩阵(18)
46. 全排列1、用二维数组代替输出数组。2、用左右标记代替标记数组,但这样的操作输出不是有序,若有序应使用标记数组。 void backtrack(vector<vector<int>>& res, vector<int>& output, int first, int len){ // 所有数都填完了 if (first == len) { res.emplace_back(outpu原创 2021-07-09 09:05:50 · 320 阅读 · 0 评论 -
力扣刷题笔记:栈和队列(13)
题型来自于剑指Offer和力扣热门100题94. 二叉树的中序遍历中序遍历包含递归和非递归两种做法,递归方法包含一个隐式栈,所以也可以用栈的方法实现遍历。class Solution {public: vector<int> ans; vector<int> inorderTraversal(TreeNode* root) { dfs(root); return ans; } void dfs(TreeNod原创 2021-01-05 21:42:12 · 271 阅读 · 0 评论 -
力扣刷题笔记:哈希表(10)
1. 两数之和一遍搜索,用map存已搜索过的数字 vector<int> twoSum(vector<int>& nums, int target) { map<int, int> a; vector<int> b; for (int i = 0; i < nums.size(); i++){ if (a.count(target - nums[i]) > 0){ b.原创 2021-08-07 11:17:39 · 232 阅读 · 0 评论 -
力扣刷题笔记:数学推导、算法(11)
172. 阶乘后的零1-4没有0,5-9有1个0,10-14有2个0,每隔5个数增加一个0,计算有多少个5即可 int trailingZeroes(int n) { int ans=0; while(n>0){ ans+=n/5; n/=5; } return ans; }191. 位1的个数1、移位运算符<<代表:需要移位的数字 << 移位原创 2021-08-08 17:29:46 · 139 阅读 · 0 评论 -
设计题(11)
手撕strcpy需考虑内存重叠问题,复制前判断字符串是否包含void strcpy1(char* a,const char* b){ if (a == NULL || b == NULL) return; char* temp = a; int len = strlen(b)+ 1; if (a > b && a < b + len){ temp = temp + len - 1; b = b原创 2021-08-07 14:27:48 · 174 阅读 · 0 评论