摘要: 滑动窗口本质上是一个双指针。 如求解和大于目标值的最短子序列一题。 首先设置左指针 left 和右指针 right 都从零开始,随后 right 开始移动并累加和,当和大于目标值时停止。 随后左指针开始移动,并不断更新最短子序列长度,并从累计和中减去 left 位置的值。 由此遍历完整个数组。 wh 阅读全文
posted @ 2022-03-24 14:44 阿豆23 阅读(34) 评论(0) 推荐(0)
摘要: 二分法有两种边界范围: 一是左闭右闭 [left, right] : 此时可以取到最右值,所以初始右边界设为:right=len(数组长度)-1,同时,边界变换时,right=mid(中值)-1; 二时左闭右开 [left, right) : 此时取不到最右值,所以初始右边界设为:right=len 阅读全文
posted @ 2022-03-24 10:12 阿豆23 阅读(95) 评论(0) 推荐(0)
摘要: 题目本身没有难度,使用栈即可。 但是有个小技巧,将左右括号对应存入哈希表中,查找时可以大大简化代码。 unordered_map<char, char> pairs = { {')', '('}, {']', '['}, {'}', '{'} }; 判断时即可使用如下代码: stk.top() == 阅读全文
posted @ 2022-03-23 10:49 阿豆23 阅读(37) 评论(0) 推荐(0)
摘要: n<<m 等同于 n*2m 阅读全文
posted @ 2022-03-23 09:04 阿豆23 阅读(34) 评论(0) 推荐(0)
摘要: n&(n-1) 可以消除掉n最右边的1. 用途如,检查二进制数中1的个数 阅读全文
posted @ 2022-03-23 08:37 阿豆23 阅读(71) 评论(0) 推荐(0)
摘要: 题目链接: https://leetcode-cn.com/problems/house-robber/ 按照基本逻辑走: 1,确定状态 首先分析题目,找核心逻辑。本题中规定不能获得相邻位置的数据,同时可以容易想到,越到后面,累加值越大。 由此我们遇到一个问题,最后取第n个数据,还是取第n-1个数据 阅读全文
posted @ 2022-03-22 10:20 阿豆23 阅读(42) 评论(0) 推荐(0)
摘要: 1,确定状态(关键要把n和n-1联系起来) 2,找到转移公式 3,确定初始条件以及边界条件 4,计算结果。 阅读全文
posted @ 2022-03-21 17:00 阿豆23 阅读(25) 评论(0) 推荐(0)
摘要: 题目链接: https://leetcode-cn.com/problems/merge-sorted-array/ 常规方法都比较容易想到,此题最妙的一个方法是从后面插入。 这样可以在原数组上操作,同时操作过程中不会产生数据覆盖冲突。 阅读全文
posted @ 2022-03-21 10:30 阿豆23 阅读(61) 评论(0) 推荐(0)
摘要: 在取中值时: int mid = left + ((right - left) / 2); 优于: int mid = (left + right) / 2; 原因为:当左值与右值的和大于容量时,操作就越界了。 阅读全文
posted @ 2022-03-21 09:49 阿豆23 阅读(75) 评论(0) 推荐(0)
摘要: vector<vector<int>> vec; vec.push_back(vector<int>()); vec.back().push_back(); 第一行创建。 第二行插入空白vector,等于换行。 第三行在末尾的vector容器中插入数据。 阅读全文
posted @ 2022-03-20 11:02 阿豆23 阅读(60) 评论(0) 推荐(0)