摘要:
labuladong解法 704. 二分查找(简单) 题目: 二分查找 思路: class Solution { public: int search(vector<int>& nums, int target) { int left=0,right=nums.size()-1; while(lef 阅读全文
摘要:
labuladong讲解 76. 最小覆盖子串(困难) 题目: 思路: 在s中找出包含t所有字母的最小子串。 使用滑动窗口算法,在need哈希表中保存t所有字母的次数。 先扩展right,如果s[right]在need中存在,就增加window[c]次数,如果window[c]==need[c],则 阅读全文
摘要:
167. 两数之和 II - 输入有序数组(中等) 思路: 有序数组求两数和等于target 使用双指针从两端夹逼的方法 class Solution { public: vector<int> twoSum(vector<int>& numbers, int target) { int left= 阅读全文
摘要:
141. 环形链表(简单) 题目: 判定链表中是否含有环 思路: 用两个指针,一个跑得快,一个跑得慢。如果不含有环,跑得快的那个指针最终会遇到 null,说明链表不含环;如果含有环,快指针最终会超慢指针一圈,和慢指针相遇,说明链表含有环。 /** * Definition for singly-li 阅读全文
摘要:
labuladong 48. 旋转图像(中等) 题目: 原地将二维矩阵顺时针旋转90度 思路: 先按左上至右下对角线对折,再将每一行调转 class Solution { public: void rotate(vector<vector<int>>& matrix) { int n=matrix. 阅读全文
摘要:
讲解:labuladong 370. 区间加法(中等) 题目: 思路: 进行多次区间加减。使用差分数组,diff[n]记录num[n]-num[n-1]。这样对于区间[start,end]的加减操作只反映diff[start]+=inc,diff[end+1]-=inc。注意要判断end+1<n,如 阅读全文
摘要:
labuladong讲解 303. 区域和检索 - 数组不可变(中等) 题目: 思路: 用前缀和记录开始到当前位置的元素和,这里前缀和数组长度n+1,presum[n+1]代表0-n的元素和 class NumArray { public: NumArray(vector<int>& nums) { 阅读全文