数据结构/算法
9号信箱
这个作者很懒,什么都没留下…
展开
-
【链表OJ题目】在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针
链接:https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef?tpId=13&&tqId=11209&rp=1&ru=/activity/oj&qru=/ta/coding-interviews/question-ranking以下为不考虑特殊情况下的思路:在考虑了常规情况的条件下,我们需要考虑下面两种特殊情况,例如下面的用例:111234(一开始就需要删除节点)...原创 2021-01-04 21:16:30 · 689 阅读 · 0 评论 -
【链表OJ题目】给定一个链表,返回链表开始入环的第一个节点
给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回NULLOJ链接思路:对于这样的一个带环链表进环之前的长度为L,环的长度为C,使用快慢指针,找到相遇的结点,结点位置距离环的入口为K,则有以下的关系:慢指针距离:L+K快指针距离:L+K+n*C(n代表走的环的圈数)2*(L+K)==L+K+n*C则 L+K==n*C即:L==n*C-K==(n-1)*C+(C-K)此时,我们可以得出,从相遇点出发,逆向绕环走会和从头结点出发走会在入环口相遇。..原创 2021-01-03 18:17:08 · 356 阅读 · 0 评论 -
判断链表是否有环,使用双指针的解法时,为什么快指针步长必须为2?
在判断链表是否带环时,我们经常会用到 一种双指针的解法非常的简单,快指针步长为2,慢指针步长为1,这样如果有环,它们肯定会在某个时刻相遇。那么问题来了,是否可以让快指针的步长为3,4,或者n呢?接下来我们分析一下:我们假设,快指针的步长为b,并且在慢指针走到环口的时候,已经走了x个步次,环长为len。那么在慢指针走到环口的时候,快慢指针在环内就会相差:(x*(b-1) )个步长(如果没走,x为0,相差也为0;所以无论环口在第一个节点或者是其它位置节点,都是可以推算出来这样的表达式)事实上,.原创 2021-01-03 14:26:00 · 854 阅读 · 0 评论 -
【链表OJ题目】链表反转的两种解法:双指针、递归
一句话思路:pre和cur不断后移,改变指针指向双指针解法:class Solution {public: ListNode* reverseList(ListNode* head) { ListNode* temp; // 保存cur的下一个节点 ListNode* cur = head; ListNode* pre = NULL; while(cur) { temp = cur-&g...原创 2021-01-01 18:19:14 · 288 阅读 · 0 评论 -
二叉树从存储到遍历详解
存储:顺序存储和链式存储顺序存储:顺序存储是将二叉树结点存储在一个一位数组中,因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号。在这里为了更好地说明问题,我们举一个例子:有一个表达式:a+b*(c-d)-e/f,我们现在需要采用顺序存储的方式来建立起这颗二叉树。...原创 2018-08-23 23:25:55 · 515 阅读 · 0 评论 -
C++ map详解
1.什么是mapmap是一个键值对容器。在处理一对一数据是,很有用。2.map数据结构的特点map内部自建一颗红黑树,这棵树具有对数据自动排序的功能,因此,map内的数据都是按key的值排好序的。3.map数据插入数据的插入有三种方法:第一种,调用insert函数,插入pair类型数据示例如下所示: #include <map>#include <...转载 2018-08-13 18:03:45 · 2601 阅读 · 0 评论 -
生产者消费者模型的代码实现(Linux环境)
/* *生产者消费者问题 * */#include<stdio.h>#include<string.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#define MAX_STOCK 20//仓库容量char g_storage[MAX_STOCK];size_t g_st...原创 2018-04-10 11:57:52 · 726 阅读 · 0 评论 -
基于链表的队列
#include<iostream>#include<stdexcept>using namespace std;class Lqueue{public: Lqueue():m_rear(NULL),m_front(NULL){} ~Lqueue(){ for(Node *n;m_front;m_front=n) {//从前到后析构 当m_fro...原创 2018-04-10 11:56:33 · 117 阅读 · 0 评论 -
基于链表的堆栈
//基于链表的堆栈#include<iostream>#include<stdexcept>using namespace std;class Queue{public: Queue():m_front(NULL),m_rear(NULL){} ~Queue(){ //节点回溯 for(Node *next;m_rear;m_rear=next) ...原创 2018-04-10 11:55:38 · 142 阅读 · 0 评论 -
顺时针打印数组元素
先说说我做这个题的思路,其实一开始拿到这个题的时候,我半天没有想法。就是不知道从哪开始,后来我就在想,既然是顺时针打印输出,我就先模拟输出一圈的情况,然后一圈的情况能够正常输出了(一圈的输出有四种情况:上边界从左到右,右边界从上到下,下边界从右到左,左边界从下到上);那么怎么样才能继续内部的输出呢,那么我想如果可以在一个循环里,那就可以一圈一圈的输出了。那么问题又来了,循环的次数如何获得呢,我于是...原创 2018-04-09 14:07:14 · 737 阅读 · 0 评论 -
动态规划之背包问题
本文主要介绍01背包和完全背包的问题,个人水平有限,如有错误,欢迎指正。动态规划算法可分解成从先到后的4个步骤:1. 描述一个最优解的结构;2. 递归地定义最优解的值;3. 以“自底向上”的方式计算最优解的值;4. 从已计算的信息中构建出最优解的路径。其中步骤1~3是动态规划求解问题的基础。如果题目只要求最优解的值,则步骤4可以省略。状态和状态转移方程?状态:每原创 2016-10-05 11:10:57 · 462 阅读 · 0 评论 -
给出先序和中序序列,还原二叉树的规律方法
给出先序和中序序列,还原二叉树的规律方法原创 2016-07-31 16:03:46 · 1536 阅读 · 0 评论