自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 leetcode热题HoT 100

4. 寻找两个正序数组的中位数思路/* 主要思路:要找到第 k (k>1) 小的元素,那么就取 pivot1 = nums1[k/2-1] 和 pivot2 = nums2[k/2-1] 进行比较* 这里的 "/" 表示整除* nums1 中小于等于 pivot1 的元素有 nums1[0 .. k/2-2] 共计 k/2-1 个* nums2 中小于等于 pivot2 的元素有 nums2[0 .. k/2-2] 共计 k/2-1 个* 取 pivot = min(pivot1,

2022-03-03 13:19:33 330

原创 与单调栈相关的算法题

1. 每日温度1.1 思路使用一个从栈底到栈顶单调递减的栈,栈内存放着温度对应的索引。每一个元素与栈顶元素比较,如果比栈顶元素小直接入栈。如果比栈顶元素大,则需要该元素减去栈顶元素即为所求元素,并存放在栈顶元素指向的对应的位置1.2 代码class Solution {public: vector<int> dailyTemperatures(vector<int>& temperatures) { stack<int

2022-01-27 19:51:55 358

原创 与动态规划有关的算法题

动态规划解题步骤确定dp数组(dp table)以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组1. 爬楼梯1.1 思路直接从结果上想问题!他要的是由多少种走法,所以dp[i] 表示爬到第i层楼梯有多少种走法。所以dp[i] = dp[i - 1] + dp[i - 2];因为从第i - 1层走一步,或者从第i - 2走两步就能到。所以从前往后遍历即可。1.2 代码class Solution {public: int c

2022-01-26 12:16:37 225

原创 与贪心有关的算法题

贪心算法贪心的本质是选择每一阶段的局部最优,进而得到全局最优。没有固定的套路,需要自行判断题目是否能用贪心来做。1. 摆动序列1.1 思路思路1:贪心:从前往后,不断找到峰值,即极大值和极小值,通过统计极大值和极小值的数量来得到结果,思路比较简单1.2 代码class Solution {public: int wiggleMaxLength(vector<int>& nums) { if(nums.size() <= 1){

2022-01-18 20:12:35 220

原创 与回溯相关的算法题

回溯的基本模板:void backtracking(参数) { if (终止条件) { 存放结果; return; } for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { //横向遍历 处理节点; backtracking(路径,选择列表); // 递归 纵向遍历 回溯,撤销处理结果 }}1. 电话号码的字母组合1.1 思路本题采用回溯的思想,因为需要通

2022-01-12 21:28:09 253

原创 与二叉树相关的算法题

1. 二叉树的遍历1.1 思路递归应该如何写?1、确定递归的参数和返回值2、确定终止条件3、确定单层递归逻辑迭代应该如何写?前序遍历为例,应先将根节点入栈,进入循环,一次从栈中弹出一个节点,读出节点值,再将右子节点、左子节点分别入栈。直至节点栈为空中序遍历和前序遍历的情况不一样,中序遍历访问节点和处理节点的顺序是不一致的,访问到父节点需要将其存入栈中,直到访问到最左边的节点才能开始处理节点。中序遍历的思路:每次先找到该节点的最左边的子孙节点,访问完子孙节点,开始出栈,处理节点

2022-01-10 10:07:29 226

原创 与栈/队列相关的算法题

1. 滑动窗口最大值1.1 思路1、使用暴力方法解决,两层循环,时间复杂度O(N*M)2、使用单调队列来解决:单调队列是一个从大到小的队列,队列内存放的是可能是窗口内的最大元素。单调栈的细节如图:单调队列的操作:(1)push(x) :x需要与队列入口的值进行比较,如果x小于等于队列入口值,则直接插入,如果x大,则队列尾部弹出,重新比较,直到队列中没有元素,或者x小于等于队列入口值。(2)pop() :如果窗口弹出的值和队列出口处的值一致,则弹出队列出口值,否则不变。1.

2021-12-29 10:14:19 356

原创 与字符串有关的算法题

1. 替换空格1.1 思路1、使用函数库中自带的replace函数和insert函数,但会超过其时间限制2、使用双指针,先扩充数组,预留出需要新增的位置,之后从后往前扩充,直到两指针相遇。1.2 代码class Solution {public: string replaceSpace(string s) { //首先判断需要扩充多大位置 int count = 0; for(int i = 0; i < s.size()

2021-12-24 19:11:06 340

原创 与hash表相关的算法题

1. 有效的字母异位词1.1 思路核心思想是使用一个数组构成的hash来存储单词出现的次数,使用字符ch-’a‘得到数组的索引。1.2 代码class Solution {public: bool isAnagram(string s, string t) { int record[26] = {0}; for (int i = 0; i < s.size(); i++) { // 并不需要记住字符a的ASCII,只.

2021-12-23 18:00:14 258

原创 与链表相关的算法题

1. 设计链表1.1 思路主要注意:1、链表节点的定义;2、边界条件的判定;3、C++类的定义方式1.2 代码class MyLinkedList {private: struct ListNode{ int val; ListNode *next; ListNode(int val): val(val), next(nullptr){}; //注意链表节点的初始化方法 }; int _size; ListN

2021-12-22 18:56:54 815

原创 与数组相关的算法题

一维数组空间是连续的,二维地址空间是多个连续的地址空间组成。因为其连续性,导致其不能随便删除元素,只能覆盖。数组类型的题目多出二分查找,双指针,滑动窗口,模拟行为等。​​​​​​​​​​​​​​​​​​​​1. 二分查找1.1 思路二分查找关键点在于对于区间的定义。主要有两种方式:左闭右闭、左闭右开。在刷题过程中默认使用左闭右闭的方式,在这个过程中需要注意两点:right = nums.size() - 1if(nums[middle] > target){ ri.

2021-12-21 18:22:49 191

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除