LeetCode刷题笔记
T_T-T_T
这个作者很懒,什么都没留下…
展开
-
2021-09-14
链表删除倒数第n个节点(双指针法)/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) :原创 2021-09-14 16:23:00 · 157 阅读 · 0 评论 -
递归+回溯 解决全排列和子集问题
全排列问题题目描述:给定一个不含重复数字的数组 nums ,返回其所有可能的全排列 。你可以按任意顺序返回答案。如给定[1,2,3],返回[1,2,3] [1,3,2] [2,1,3] [2,3,1] [3,2,1] [3,1,2]class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>原创 2021-08-30 14:56:42 · 136 阅读 · 0 评论 -
2021-08-01
缺失的第一个正数给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n),并且只使用常数级别额外空间的解决方案。本题如果不要求使用常数级别额外空间,我们可以简单的遍历数组,并使用哈希表存储每个正整数然后再找出第一个没有出现的正整数。进一步考虑,我们使用哈希表的原因在于哈希表能够存储元素位置和值的关系,基于此,我们发现我们也可以利用自身的数组来做这件事,具体方式为将值x放在数组的x-1处,然后从头遍历,找到第一个num[i]!=i-1的值即可原创 2021-08-01 16:58:53 · 264 阅读 · 0 评论 -
牛客网刷题笔记——树
文章目录求二叉树的层序遍历在二叉树中寻找最近的公共祖先二叉树的先序、中序、后序遍历二叉树根节点到叶子节点之和为指定值的路径二叉树所有路径和求二叉树最大深度判断二叉树是否为平衡二叉树升序数组转化为平衡二叉树根据先序遍历结果和中序遍历结果重建二叉树合并二叉树二叉搜索树第K个节点二叉树的镜像二叉树是否对称求二叉树的层序遍历给定一个二叉树,返回该二叉树层序遍历的结果实现思路:BFS, 用队列保存每一层节点1️⃣先将根节点入队2️⃣当队列不为空①求出当前队列len(即当前层)②取出前len个节点,值存起原创 2021-07-24 17:13:43 · 180 阅读 · 0 评论 -
牛客网刷题笔记——链表
反转链表描述输入一个链表,反转链表后,输出新链表的表头。输入: {4,1,2,3}返回值: {3,2,1,4}本题看似是一道很简单的题,很多人刷题之路可能是从这道题开始,但如果不看题解,能独立想清楚却并不是那么容易,此题考查的是通过对链表指针的操作,实现链表反转。建议看完实现思路后,自己画一遍过程。实现思路使用三个指针,来实现1、cur指针指向待反转链表的第一个节点2、pre指针指向已反转链表的最后一个节点3、nex指针用以保存待反转链表的下一个节点实现过程:1、记录下一个节点原创 2021-07-18 17:13:58 · 179 阅读 · 0 评论 -
排序算法专题总结——桶排序
算法介绍桶排序的意思是为每个值设立一个桶,然后桶内记录这个值出现次数,然后对桶排序 本文将使用C++ STL中的map和vector来做简易实现例题 给定一个数组,求前K个最频繁的数字代码实现#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;bool cmp(const pair<int,int>原创 2021-07-03 19:31:59 · 83 阅读 · 2 评论 -
排序算法专题总结——归并排序
前言归并排序算法是典型的分治算法,现将数组自上而下递归的拆分为n个只有一个元素的数组(此时自然有序),然后再底向上合并每个数组,思路很简单,实现起来也很简单,但如果不动手做一遍,面试现场让你先写,可能会很懵逼,血的教训如果有对实现细节还不清楚的童鞋,可以移步这里示例代码//归并排序#include<iostream>#include<vector>using namespace std;void merge(vector<int>& num原创 2021-07-03 17:12:56 · 64 阅读 · 0 评论 -
排序算法专题总结——快速排序
前言 在所有的排序算法中,快速排序以其优越的性能(O(nlogn))被我们熟知,算法原理看似很简单: 0️⃣找一个基准值(一般为最左边的值),然后通过单趟扫描后将待排序数组分成两部分 1️⃣一部分都小于等于基准值 2️⃣另一部分都大于等于基准值 3️⃣两边分别递归执行直到结束示例代码#include<iostream>#include<vector>using namespace std;void quicksort(vector<int>&原创 2021-07-03 16:08:30 · 379 阅读 · 0 评论 -
LeetCode刷题笔记——二分法
前言咕咕了一周的算法专题今日起正式回归啦,今天总结一个看起来好像很简单,但实际上有点难的二分法算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务,需分具体场景使用例题Sqrt(69)题目描述 给定一个非负整数,求它的开方,向下取整。解题思路 很简单,直接看代码吧参考代码int my_sqrt(int num){ if(num==0) return 0; int l = 1, r = num, mid, sqrt;原创 2021-06-28 20:44:08 · 88 阅读 · 0 评论 -
LeetCode刷题笔记——滑动窗口
前言本文用的算法思路与上一节(双指针)一致,但由于这部分题目理解起来较难,所以单独写一篇例题Minimum Window Substring(76)题目描述 给定两个字符串S和T,求S中包含T所有字符的最短连续子字符串,同时要求时间 复杂度为O(n)输入输出样例 Input:S="ADOBECODEBANC" T="ABC" Output:BANC解题思路本题使用滑动窗口来求解,使用两个指针left和right,均自左向右移动,且left<=right1、开始时left指原创 2021-06-19 15:20:42 · 153 阅读 · 0 评论 -
LeetCode刷题笔记——双指针
文章目录算法解释例题Two sum(167)题目描述输入输出样例解题思路参考代码Merge Sorted Array(167)题目描述输入输出样例解题思路参考代码Linked List Cycle(142)题目描述解题思路Floyd判圈法参考代码算法解释 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务,需分具体场景使用例题Two sum(167)题目描述 在一个增序的整数数组里找到两个数,使他们的和为定值,已知有且只有一对解输入输出样例 Input:array=[2,7原创 2021-06-18 18:50:15 · 142 阅读 · 0 评论 -
LeetCode刷题笔记——贪心算法
LeetCode刷题笔记——贪心算法前言 本人腾讯TEG大三实习生,之前数次面试字节后端开发实习生,都被按在地上摩擦,主要原因还是刷题太少,之前应对面试简单刷了一些题,也基本忘完了,故此决定系统刷一下LeetCode题目,主要参考书目为LeetCode101自2021/6/17,将每日更新本人刷题笔记~欢迎交流~算法解释 贪心算法,顾名思义,就是每一步操作都保证局部最优,从而使得最后的结果为全局最优的一种思想例题Assign Cookies(455)题目描述 有一群孩子和一堆饼干,原创 2021-06-17 20:45:39 · 195 阅读 · 0 评论