九章算法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

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 708

二叉树公共节点

【题目】给定二叉树的两个二节点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

学术报告系列(二) - 智能自主作业机器人感知与控制技术及发展趋势

收集整理于2022年模式识别高峰论坛湖南大学王耀南院士报告(报名题目:智能自主作业机器人感知与控制技术及发展趋势)

Make something people want. 4696

Windows 10/11系统下TurboDesign 6.4.0完整安装指南(附序列号+破解补丁)

本文提供Windows 10/11系统下TurboDesign 6.4.0的完整安装指南,涵盖系统环境预检、安装程序部署、序列号处理及破解补丁部署等关键步骤。通过详细的安装教程和优化配置,帮助用户高效完成这款涡轮机械设计软件的安装与调试,解决常见兼容性问题。

s4t5u6v的博客 1029

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

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

阿也的博客 2622

若依前后端分离版实战:MQTT集成保姆级教程(含MQTTX测试工具使用)

本文详细介绍了在若依前后端分离架构中集成MQTT协议的完整流程,包括环境搭建、核心配置、安全实践及性能优化。通过MQTTX测试工具的使用和实战代码示例,帮助开发者快速实现物联网场景下的实时通信功能,提升系统稳定性和效率。

weixin_30664051的博客 456

九章算法学习笔记

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

wxq_csdn的博客 409

稚晖君Dummy机械臂CAN总线控制详解:从代码到实战(附常见问题排查)

本文深入解析了稚晖君Dummy机械臂的CAN总线控制技术,从协议设计到代码实现,详细介绍了CAN总线在机械臂控制中的核心价值、通信协议栈设计、运动控制指令实现及常见问题排查方法。通过实战案例和代码示例,帮助开发者快速掌握机械臂CAN总线控制的关键技术。

uuu88的博客 294

【扣子AI开发】如何开发一个图像生成智能体?

【扣子AI开发】如何开发一个图像生成智能体,从创建到发布

tl437002770的博客 2427

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

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

weixin_30254435的博客 504

人工智能混合编程实践:C++调用封装好的DLL进行异常检测推理

C++、Python、ONNX、人工智能、异常检测、Anomalib 2.1.0

FriendshipTang的博客 170

九章算法班L5 Linked List

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

weixin_30536513的博客 142

在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开

摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2390

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

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

weixin_30892987的博客 281

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

weixin_30830327的博客 76

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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、付费专栏及课程。

余额充值