九章算法6:Linked List

Spring AI实战:除了Gemma,如何为Ollama换上更专业的中文Embedding模型(如dmeta-embedding-zh) 本文详细介绍了如何在Spring AI项目中为Ollama选择并集成专业的中文Embedding模型(如dmeta-embedding-zh),以解决通用大模型在中文语义理解上的局限性。通过对比测试和实操步骤,展示了专业模型在中文古诗等场景中的显著优势,帮助开发者提升语义搜索的准确性和效率。 阅读详情

九章算法6:Linked List

内容基于九章算法课件
(http://www.jiuzhang.com/)

链表的结构

这里写图片描述
如果我进行两个操作:

  1.node1 = node2;
  2.print head

具体代码
这里写图片描述
结果仍是

            1 2 3

因为node1只是一个地址信息,如果把内存比作一个大数组, 这个node1
只是这个数组的index. node1 = node2是地址赋值, 赋值完成之后就变成这样:
这里写图片描述
如果想要从第二个开始输出的话, 可以:

  head = node2;

如果想要影响链表的结构的话,可以:

  node1.next = node2.next;

之后链表就变成了:
这里写图片描述
java里面node2就自动删除了, C++里分版本, 具体老师木有说, 我也不造…

debug

两种方法:

 1.一步步带入, 人脑模拟电脑运行...
 2.关键点print

Remove Duplicates from Sorted List II

Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
核心问题是:
prev-> cur-> next 这个链表操作中, 涉及到前一个, 当前和后一个:

   prev.next = cur.next

如果删除的是第一个怎么班呢, 比较方便和通用的是添加一个dummy node:

       1. new一个dummy node;
       2. dummy.next = head;
       3. return dummy.next

Reverse Linked List II

Reverse a linked list from position m to n.

Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL.
注意事项如下:

1.m可能等于1, 所以要加一个dummy node
2.m-1步找到prevM和M
3.reverse m~n
    temp = cur.next;
    cur.next = prev;
    prev = cur;
    cur = temp;
    右边变左边,最后一个右边是第一个左边.
4.connect

Dummy Node

Used when the head is not determined.
比如说用到 partition和merge

Partition List

Given a linked list and a value x, partition it such that all nodes less than x come before nodes greater than or equal to x.

You should preserve the original relative order of the nodes in each of the two partitions.
注意:

1.partition 是先整体有序再局部有序.
2.merge 是先局部有序,再整体有序

Middle of a linked list

Find the middle node of a linked list.

Given 1->2->3, return the node with value 2.
Given 1->2, return the node with value 1.
注意:

 1.两个指针,一根走一步的时候,另一根走两步.
 2.fast和slow错开一个放

Sort list

Sort a linked list in O(n log n) time using constant space complexity.

constant space complexity means: O(1)的时间复杂度
首先, nlogn的排序:

  1.快排, 无额外空间,运用partition的方法
  2.merge sort,O(n)的额外空间,运用归并的思想
  3.heap sort, O(n)的额外空间

这道题可以用quick sort写:

1.之中用<=x和>=x而不是<x和>x
2.奇数的往左扔,偶数个往右扔,以防出现1,2,2,2,2,2,2...这样的

第二条暂时不明白, 估计需要自己写写~

Reorder

Given a singly linked list L: L0 → L1 → … → Ln-1 → Ln
reorder it to: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …

Given 1->2->3->4->null, reorder it to 1->4->2->3->null.
注意:

 1.找中点
 2.reverse后半边
 3.左边取一个,右边取一个

链表环和circleII

快慢指针:
小明和小红,小明一分钟跑两米,小红一分钟跑一米,神马时候扣圈儿相遇…

circleII:相遇后, slow回到头, slow和fast各一次一步,相遇即为环的头.

Merge k Sorted Lists

K路归并算法?

heap

merge的核心是:谁小谁出列.
k个数里面取最小,用堆
这道题用priority queque 本质是heap
一个大小为k的堆,操作用时logk
这道题需要Nlogk, N是所有list 的长度之和

merge sort的分治法

这里写图片描述
Nlogk没整明白…居然这样…

两两合并

这里写图片描述

Copy List with Random Pointer:Deep copy

A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.

Return a deep copy of the list.
random pointer可能指向自己,其它,或者空.

简单粗暴的解决办法:

1.new出node1’, node2’ 并连到node1’, node3’并连到node2’…
2.hashMap(key: old 节点) = 新节点
3.random pointer就再for一遍

不简单粗暴的方法

1.原始的节点node1, node2 等变成

 node1.next = node1';
 node1.next.next = node2;

2.if node1.next 连自己, node1’.next也连自己

  node2.next.random = node2.random.next

3.拆开:

      next = next.next

Convert sorted array into balanced tree

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

1->2->3 =>
2
/\
13

nlogn的树形分析法

这里写图片描述

challenge: o(n)时间

没整明白…

写结题报告:

1.一句话描述这个题
2.算法是什么?用到了什么数据结构?
3.从这道题能学到什么?
分治,做过merge two, 知道题merge k
4.写程序可能遇到的bug

完整视频-coursera公开课 普林斯顿算法 ⅠⅡ部分 本资源为BT文件,下载速度快,如果P2P工具支持下载字幕可以进行下载 Coursera上的公开课,普林斯顿大学教授Robert Sedgewick主讲《Algorithms》算法 Java实现 课程网站http://algs4.cs.princeton.edu/home/ 视频一个两部分,算法(一)主要集中在基础的数据结构、排序、查找算法。 相关主题有:并查集算法,二分查找,栈,队列,背包,插入排序,选择排序,希尔排序,快速排序, 三切分快排,归并排序,堆排序,二分堆,二分查找树,红黑树,链表,线性哈希表,Graham扫描,kd树。 算法(二)主要讲解图论和字符串处理的相关算法。相关主题有:深度优先搜索,宽度优先搜索,拓扑排序,Kosaraju-Sharir算法,Kruskal算法,Prim算法,Dijkistra算法,Bellman-Ford算法, Ford-Fulkerson算法, LSD radix sort算法, MSD radix sort算法, 3-way radix 快排算法, 多路尝试法, 三元查找尝试法, Knuth-Morris-Pratt算法, Boyer-Moore算法, Rabin-Karp算法, 正则匹配, run-length编码, Huffman编码, LZW压缩, 还有Burrows-Wheeler变换。 立即下载

相关推荐

九章算法高频1_高频题风格解析.pdf

在程序设计语言中,可以使用随机函数来模拟自然界中发生的不可预测的情况。C语言中使用srand()函数和rand()函数可以生成随机数。使用这两个函数需要包含time.h头文件。 实例一,猜数字游戏。使用模拟算法编写一个猜数字游戏,由计算机随机生成一个1-100之内的整数,然后由用户来猜这个数,根据用户猜测的次数分别给出不同的提示文字。

python 数据结构与算法 <3>链表

python 数据结构与算法 < >链表1. node1=node22. node1.next=node2 python 数据结构与算法 1.python 数据结构与算法<1> 排序 2.python 数据结构与算法<2> 动态规划(dp) 刷链表(linked list)的题,一定要想清楚链表、节点(或者叫指针)之间的关系。 1. node1=node2 这是把以节点2为head的链表赋值给了node1。 进行操作后,node1就与它之前的状态没有关系了。 所以轻易

驽马十驾,功在不舍;锲而不舍,金石可镂。 237

从零到一:Silvaco中跨导曲线的自动化脚本实现

本文详细介绍了如何使用Python脚本在Silvaco中实现跨导曲线(gm曲线)的自动化分析,包括数据加载、跨导计算和结果可视化。通过自动化处理Id-Vg曲线,显著提升半导体器件工程师的工作效率,特别适用于工艺优化和DOE分析。文章还提供了批量处理和关键参数提取的高级技巧,帮助工程师快速掌握Silvaco脚本开发。

nn3456的博客 566

二叉树公共节点

【题目】给定二叉树的两个二节点node1,node2,找出这两个节点的最低公共祖先节点 【思路】 2种情况 1.node1是node2的祖先节点或者node2是node1的祖先节点 2.node1和node2属于不同的子树 【方法一】利用递归 private Node lowestCommonAncestor(Node head, Node o1, Node o2){ if (head == null || o1 == head || o2 == head){ return head;

芝麻年糕的博客 436

Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法

Quartus II 13.1 出现 ''can't find design entity '' 问题的解决方法

qq_62076686的博客 1万+

【PDN仿真笔记9-使用Sigrity PowerDC进行IR Drop仿真的方法】

使用Sigrity PowerDC进行IR Drop进行仿真的方法

qq_42682826的博客 8000

动态规划(九章算法)详细学习

1.什么是动态规划 存在最优子程序,跟分治最大区别就是存在很多相同的子问题,如果用递归就会存在相同的值算了很多次。所以可以用数组的形式将已经计算出来并且后面又需要用得到的保存在数组中。 一般求最值(最大/最小)、求总值、存在性问题 2.基本步骤 以最少零钱兑换题目为例:注意,存在无法找零钱(2、5、7)的情况,此时返回-1即可。但是在写程序的时候就要注意了,可将无法找够零钱的值设置为无穷大。 (1)确定状态,一维还是二维,首先由最后一步分析状态:最后一枚硬币可以是2、5、7,所以最少硬币会在这三种情况里面出

阿也的博客 2622

遥感图像语义分割的全流程实现(Python代码)

本节介绍了加载遥感 RGB 图像和对应的单通道掩膜(mask)。掩膜中每个像素值为类别索引(如0=背景,1=植被,2=建筑),通过 transform 统一缩放(256×256)和归一化(ImageNet 均值/标准差),确保输入模型的一致性。# 自定义数据集类(适配遥感RGB+单通道掩膜)mask = Image.open(mask_path).convert("L") # 单通道掩膜return image, mask.squeeze(0).long() # 返回RGB图像和类别索引。

qq_42679807的博客 1851

九章算法学习笔记

九章算法第二章学习 四种不好的代码风格: 异常检测:需要对空对象进行特判; 变量命名:尽量不要用单个字符进行命名; 代码美观:在必要的位置需要加上空格; 缩进过多:通过用函数包装代码块减少代码的缩进。 实现较好的Coding Quality 判断参数异常值 变量命名易懂,避免abcd…… 缩进尽量不超过三层 函数名命名合理,如return的是boolean值,则可写isxxx() 逻辑块使用空行分开 必要位置需要添加空格,如for (int i = 0 ;……) 优化算法的逻辑

wxq_csdn的博客 409

工业级Modbus ASCII实时监控系统(WinForms完整实现)

本文介绍了一个基于WinForms的工业级Modbus ASCII实时监控系统实现方案。该系统采用经典工控界面布局,包含串口配置、数据采集控制和实时数据显示三大区域。核心功能包括:串口通信参数设置、Modbus从站地址配置、寄存器数据采集、实时数据表格展示和趋势图绘制。系统通过ModbusAsciiClient类实现通信核心,采用定时器轮询机制采集数据,支持最多100个数据点的历史趋势显示。界面设计注重用户体验,配置区位于左侧,主显示区在右侧,底部为状态和日志区,符合工业控制系统的操作习惯。代码示例展示了窗

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 277

SAP 生产订单工序删除状态撤回简介

2、我们在前台对于生产订单的状态一个是在生产订单抬头中的状态,另外一个是针对上面一直在测试的是工序的状态,这个两个状态是前台可见的状态,实际生产订单还有一个组件物料的状态,这个状态是不可见的一个状态。生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配了工序是不应该被删除的。将已领料的工序删除掉,导致异常的发生。当物料已领料会,用户仍然把已分配的物料的工序删除掉,导致后续业务操作过程中产生异常,如下图中所示,0010的工序被打上了删除标识。

我小时候很黑的博客 1938

九章算法知识点与题目总结(不定时更新...)

------------------------------------------------ 本笔记主要记录在刷九章题目中的思路、问题,以及不能bug-free的原因。 Time Complexity in Coding Interview • O(1) 极少 • O(logn) 几乎都是二分法 • O(√n) 几乎是分解质因数 • O(n) 高频 • O(nlo...

weixin_30254435的博客 504

基于matlab的形态学的权重自适应图像去噪

数学形态学以图像的形态特征为研究对象,通过设计一套独特的数字图像处理方法和理论来描述图像的基本特征和结构,通过引入集合的概念来描述图像中元素与元素、部分与部分的关系运算。因此,数学形态学的运算由基础的集合运算(并、交、补等)来定义,并且所有的图像矩阵都能被方便地转换为集合。随着集合理论研究的不断深入和实际应用的拓展,图像形态学处理也在图像分析、模式识别等领域起着重要的应用。实验结果表明,如果仅通过串联滤波器去噪,则往往具有一定的局限性,在结果图像中也保留着较为明显的噪声。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 757

九章算法班L5 Linked List

转载于:https://www.cnblogs.com/sissie-coding/p/10295462.html

weixin_30536513的博客 142

硬件工程师入门基础知识(一)基础元器件认识(二)

我们的电路输入一般是只有两种状态,0V 或者是其它的高电平(1.8V,3.3V,5V 等),截止状态一般不用怎么考虑,因为如果让三极管的 Vbe=0,自然就截止了,重要的是饱和状态如何保证。也就是说只要 Rb

小幽余生不加糖 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

九章算法笔记 6.链表与数组 Linked List & Array

刷题注意事项 cs3k.com 每道题需要总结的 思路 算法 核心代码 这个题得到的启示!!!重点是bug free的能力 linked list理解 结果两个都是 1 2 3 node是存在main函数里的局部变量, 还是全局变量? 局部 node1 是一个指针, 在32位即中占有4个字节. 也可以理解为引用, 存的是一个内存的地址. 所以一个L...

weixin_30892987的博客 281

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

九章算法系列(#5 Linked List)-课堂笔记

前言 又是很长时间才回来发一篇博客,前一个月确实因为杂七杂八的事情影响了很多,现在还是到了大火燃眉毛的时候了,也应该开始继续整理一下算法的思路了。Linked List大家应该是特别熟悉不过的了,因为这个算是数据结构了里面基本上最开始讲的结构吧。这块内容也没有太多需要琢磨的技巧,可以考量的东西也不多,所以考的就是一些小的trick来完成,面试中链表考得特别多,算是面试官对面试者的基础的考查,所以...

weixin_30830327的博客 76

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Leetcode-142: Linked List Cycle II

这题非常经典,其实没见过的话短时间内想出空间复杂度O(1)的解法我觉得不容易。 解法1:用set或map。但要是要求空间复杂度O(1)就不行了。 ListNode *detectCycle(ListNode *head) { if (!head) return NULL; set&amp;lt;ListNode *&amp;gt; s; ListNode* p = head; ...

roufoo的博客 223

lintcode flatten-binary-tree-to-linked-list 将二叉树拆成链表 前序扁平化 中序扁平化

问题描述lintcode笔记看了半天还是比较能接受递归的解法。参考: [LeetCode] flatten binary tree 扁平化二叉树 思路:假设以下函数 TreeNode covert2link(TreeNode *root) 可以将一棵树转化为符合要求的链表,并返回链表的尾部(链表的头部必定是root)。那么该怎么做呢?那就是: 首先,调用这个函数把左子树转化为符合要求的链表,

stevewong的专栏 951

LeetCode-Flatten Binary Tree to Linked List

/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Soluti

算法菜鸟 467

lintcode453- Flatten Binary Tree to Linked List- easy

Flatten a binary tree to a fake "linked list" in pre-order traversal. Here we use therightpointer in TreeNode as thenextpointer in ListNode. Notice Don't forget to mark the left child of ea...

weixin_30387663的博客 95

LintCode(Flatten Binary Tree to Linked List)翻转二叉树为链表 的变体

题型:深度优先搜索、二叉树操作题

算法设计艺术 542

九章算法班L1 Binary Search & Sorted Array

转载于:https://www.cnblogs.com/sissie-coding/p/10295429.html

weixin_30726161的博客 126

Ubuntu 18.04 安装 ROS Melodic:从避坑到实战的完整指南(含rosdep疑难杂症解决)

本文提供了在Ubuntu 18.04系统上安装ROS Melodic的完整指南,特别针对rosdep初始化等常见问题提供了详细解决方案。从系统准备、软件源配置到环境设置,逐步指导用户完成安装,并通过小乌龟仿真验证安装效果。文章还包含Python版本冲突、依赖项缺失等疑难问题的实用解决方法,帮助开发者顺利搭建ROS开发环境。

weixin_33834628的博客 457

亚麻面试题:带环链表

LintCode(炼码) / LeetCode 参考答案免费查询描述中文给定一个链表,判断它是否有环。在线评测地址LintCode 炼码样例样例 1:输入:linked list = 21->10->4->5,then tail connects to node index 1(value 10).输出:true解释:链表有环。样例 2:输入:linked list = 21-&...

九章算法的博客 193
上一篇: 九章算法5:动态规划II
下一篇: 九章算法7:Array & Numbers
Stomachache007
博客等级 码龄11年 13粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值