
Leetcode
文章平均质量分 56
unspoken0714
这个作者很懒,什么都没留下…
展开
-
单调栈详解
使用背景通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。单调栈的本质是空间换时间,用一个栈来记录右边第一个比当前元素的元素,优点是只需要遍历一次。单调栈的时候首先要明确如下几点:单调栈里存放的元素是什么?单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取单调栈里元素是递增呢? 还是递减呢?使用单调栈主要又三个判断条件。当前遍历的元素T[i]小于栈顶元素T[st.top()]的原创 2021-03-06 07:50:14 · 275 阅读 · 0 评论 -
双指针 + 滑动窗口
双指针法双指针法可以看成是虫在蠕动,先右指针移动,然后左指针在根据判定条件,不断移动,直至满足判定条件。接着右指针再次移动,如此循环用代码模板可以看成int left = 0;int right = 0;int res = 0;while(right < nums.size()){ sum+=nums[right]; while(不满足条件时){ sum-=nums[left]; left--; } res = max(res, right - left + 1); ri原创 2021-02-05 06:35:31 · 186 阅读 · 0 评论 -
二分法
适用场景一般适用场景是有序数组中查找指定元素。模板大佬的模板目标值包含在我们设置的范围中(通过mid来判定)、# Input: vector<int> nums, targerint left = 0;int right = nums.size()-1;while(left <=right){ # 为了防止溢出 int mid = left + (right - left) /2; if(nums[mid] == target){ return mid; }原创 2021-02-01 07:02:35 · 106 阅读 · 0 评论 -
动态规划(0-1背包)
动态规划通常可以拆解为五步,确定dp数组下标的含义确定状态转换方程dp数组如何初始化确定遍历顺序举例推到dp数组原创 2021-01-13 07:44:14 · 122 阅读 · 0 评论 -
动态规划,股票问题留坑
leetcode 股票问题汇总转载 2020-12-17 07:03:25 · 149 阅读 · 0 评论 -
c++一些常见的内置函数(字符串)
字符串与数字之间互换将数字类型数据结构转换成字符串int a = 1;double b = 0.0;string digit1 = to_string(a);string digit2 = to_string(b);cout << digit1 << endl; #1cout << digit2 << endl; #0.000000将字符串转换成整形数据如果字符串含有小数位,则直接省略掉小数位int a = 1;str原创 2020-12-17 07:01:42 · 536 阅读 · 0 评论 -
有关字符串元素统计类型题目的一点感想
在刷leetcode时,常常会发现需要将字符串中的char统计出现的频率。其实这时我们可以构建一个数组储存字符出现的频率。string s;vector<int> con(26,0);for(char e:s){ con[e-'a']++;}例子621. 任务调度器给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任原创 2020-12-05 06:09:46 · 292 阅读 · 0 评论 -
Leetcode升级之路(数据结构更新完毕)增加C++版本ing
时间复杂度常见的时间复杂度O(1):执行常数次,和输入无关def O1(num): i = num j = num*2 return i+jO(N):def ON(num): total = 0 for i in range(num): total+=i return totalO(logN):def OlogN(num); i = 1 while(i < num): i = i*2 return iO(M+N)def OMN(原创 2020-11-28 18:03:45 · 3658 阅读 · 3 评论 -
贪心算法LEETCODE集锦(包含区间问题)
455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。示例 1:输入: g = [1,2,3], s = [1,1]输出: 1解释:你有三个孩子和两块小饼干,3个孩子原创 2020-11-25 18:37:00 · 455 阅读 · 0 评论 -
回溯(n皇后问题+组合总和 I+II+III)
问题描述: 任意两个皇后都不能处于同一行,同一列或者同一斜线上,请问有多少种排列方法public class MyEightQueen { /** * @ param max: 皇后的数量 * @ param array[]: 储存皇后的摆放方式; * @ param count: 总的摆放数量; */ public int max; public int[]array; public int count; /**原创 2020-07-28 00:02:55 · 273 阅读 · 0 评论 -
归并排序法及优化
归并排序法将数组分成两半,然后分别对其排序在将两部分在分别分成两半,然后对其排序直到每部分只剩下一个元素最后再使用递归merge两边的数组。Merge时,需要借助三个指针。一个指向左半部分;一个指向右半部分;一个指向辅助数组。class Solution {public: // 归并排序 void merge(vector<int>& arr, int low, int mid, int high){ // vector<int&原创 2020-09-09 17:28:16 · 132 阅读 · 0 评论 -
快速排序
Leetcode 912 数组排序给你一个整数数组 nums,请你将该数组升序排列。方法一: 快速排序参考: https://blog.youkuaiyun.com/wthfeng/article/details/78037228基本思想:将基点放入他正确的位置,将数组划分为两份: 大于基点的,小于基点的。然后对两份分别进行递归,直至所有的点都位于合适的位置。确定出归条件,当区间只含有一个元素时,即:不用继续排序了。 所以出归条件为: low >= high.先将右边界向左扫描,遇到小于基点的元素原创 2020-09-09 03:11:29 · 175 阅读 · 0 评论 -
Leetcode报错诊断
Heap-buffer-overflow引索越界,做题时maxIndex = nums.size();应该是maxIndex = nums.size() - 1;===================================================================30==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60300000000c at pc 0x000000401749 bp 0x7f原创 2020-09-09 01:02:42 · 439 阅读 · 0 评论 -
Leetcode有关原地操作数组的题
Leetcode 26给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路:使用双指针法,pre, cur原创 2020-09-08 08:07:44 · 336 阅读 · 0 评论 -
反转链表
反转一个单链表。(Leetcode 206)思路分析:设置一个指针(cur),记录当前遍历位置;设置一个指针记录下一个位置pre,还可以指向当前位置,实现反转确定遍历结束条件cur1=0;遍历结束后,返回cur/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NUL原创 2020-07-29 13:44:53 · 94 阅读 · 0 评论