文章链接:24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II24.两两交换链表中的节点思路注意是交换节点,不只是值。该题直接模拟。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;
文章链接:203.移除链表元素、707.设计链表、206.反转链表203.移除链表元素思路因为在链表操作中,对头节点的处理与其他节点的处理不同,所以头节点需要特殊处理。本文对链表的操作为设置一个虚拟头结点在进行删除操作。代码/** * Definition for singly-linked list. * struct ListNode { * int val; * Li
文章链接:242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和242.有效的字母异位词思路可以定义一个数组(数组其实就是一个简单哈希表),来记录字符串s里字符出现的次数;在遍历字符串t的时候,减去出现过的字符;最后再遍历一次record,若有非零数,则说明原字符串不是字母异位词。代码class Solution { public: bool isAnagra
文章链接:209.长度最小的子数组、59.螺旋矩阵II、58. 区间和、44. 开发商购买土地209.长度最小的子数组思路:用滑动窗口的思路求解。所谓滑动窗口,就是不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。滑动窗口的的本质就是双指针,只有一个for循环用于遍历终止位置(j)。代码:class Solution { public: int minSubArrayLen(i
704.二分查找思路:该题我用的是“左闭右闭”的二分写法。对于该写法,需要注意的是记得更新left和right的时候要+或是-1(下面的相关代码处有标注)。代码:class Solution { public: int search(vector<int>& nums, int target) { int left = 0; int ri
在参加代码随想录的很久之前,我就听闻了卡哥的大名,也在B站上看到了相关的视频,但由于自制力一直不行,所有总是坚持不下去,当时好像就只看到了数组,甚至于链表都没开始看,就已经放弃了。想着这个暑假不能荒废了,就狠下心报名了训练营。并在这个暑假完成了代码随想录的一刷,自我感觉对于算法与数据结构的理解上了一个新的档次,希望以后能在有空闲时间对代码随想录进行二刷甚至于三刷。卡哥的代码随想录对于算法的讲解非常
文章链接:Floyd 算法精讲、A * 算法精讲 (A star算法)、最短路算法总结、图论总结题目链接:97. 小明逛公园、126. 骑士的攻击Floyd 算法精讲B站视频讲解:【图-最短路径-Floyd(弗洛伊德)算法】https://www.bilibili.com/video/BV19k4y1Q7Gj?vd_source=65a224d3f97ae5a1002c0964faf8a876思路
文章链接:Bellman_ford 队列优化算法(又名SPFA)、bellman_ford之判断负权回路、bellman_ford之单源有限最短路题目链接:94. 城市间货物运输 I、95. 城市间货物运输 II、96. 城市间货物运输 IIIBellman_ford 队列优化算法(又名SPFA)优化思路:只需要对上一次松弛的时候更新过的节点作为出发节点所连接的边进行松弛就够了。B站视频讲解:【最
文章链接:dijkstra(堆优化版)精讲、Bellman_ford 算法精讲题目链接:47. 参加科学大会、94. 城市间货物运输 Idijkstra(堆优化版)精讲思路:其实思路依然是 dijkstra 三部曲:第一步,选源点到哪个节点近且该节点未被访问过;第二步,该最近节点被标记访问过;第三步,更新非访问节点到源点的距离(即更新minDist数组)。只不过之前是 通过遍历节点来遍历边,通过两
文章链接:拓扑排序精讲、dijkstra(朴素版)精讲题目链接:117. 软件构建、47. 参加科学大会拓扑排序精讲拓扑排序的定义:给出一个有向图,把这个有向图转成线性的排序就叫拓扑排序。(当然拓扑排序也要检测这个有向图 是否有环,即存在循环依赖的情况,因为这种情况是不能做线性排序的。所以拓扑排序也是图论中判断有向无环图的常用方法。)思路:第一步:找到入度为0 的节点,加入结果集;第二步:将该节点
文章链接:prim算法精讲、kruskal算法精讲题目链接:53. 寻宝最小生成树最小生成树是所有节点的最小连通子图, 即:以最小的成本(边的权值)将图中所有节点链接到一起。prim算法prim三部曲第一步,选距离生成树最近节点;第二步,最近节点加入生成树;第三步,更新非生成树节点到生成树的距离(即更新minDist数组)。动画演示见B站视频:【最小生成树(Kruskal(克鲁斯卡尔)和Prim(
文章链接:108. 冗余连接、109. 冗余连接II题目链接:108. 冗余连接、109. 冗余连接II108.冗余连接思路:从前向后遍历每一条边,边的两个节点如果不同根,就加入集合(即:同一个根节点)。如果同根,就直接输出,因为这两个节点已经连在一起了,再加入这条边一定就出现环了。#include <iostream> #include <vector> using na
文章链接:并查集理论基础、107. 寻找存在的路径题目链接:107. 寻找存在的路径并查集理论基础并查集可以解决的问题并查集常用来解决连通性问题,就是当我们需要判断两个元素是否在同一个集合里的时候,我们就要想到用并查集。并查集的两个功能:1.将两个元素添加到一个集合中;2.判断两个元素在不在同一个集合。原理与相关代码1.如何将两个元素添加到同一个集合中// 将v,u 这条边加入并查集 void j
文章链接:110. 字符串接龙、105.有向图的完全可达性、106. 岛屿的周长题目链接:110. 字符串接龙、105.有向图的完全可达性、106. 岛屿的周长110.字符串接龙思路:第一步:判断点与点之间的关系,如果两个字符只差一个字母,那就是有链接。第二步:求起点和终点的最短路径长度,即无向图求最短路。(广搜最为合适,广搜只要搜到了终点,那么一定是最短的路径)#include <iost
文章链接:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿题目链接:101.孤岛的总面积、102.沉没孤岛、103.水流问题、104.建造最大岛屿101.孤岛的总面积思路:只要从周边找到陆地然后 通过 dfs或者bfs 将周边靠陆地且相邻的陆地都变成海洋,然后再去重新遍历地图 统计此时还剩下的陆地就可以了。// DFS #include <iostream>
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号