链表转换

这里没有记住,需要在吸收下 链表反转 206. 反转链表 for循环处理 时间复杂度O(N)(循环整个链表),空间复杂度O(1),只有几个临时变量 其实链表反转,无非就是上面这张图。 记录current的next节点(因为这里current的next需要指向pre) 把current的next指向pre 把current节点变成pre节点 把next节点变成current节点 最后当current节点变成空时,pre节点就是反转后的链表 代码如下: if head == nil || head.Next == nil { return head } current := head // 把头指向当前 var pre *ListNode // 做一个pre节点 for current != nil { next := current.Next // 1.记录当前的下一个节点 current.Next = pre // 2.把当前的next指向pre pre = current // 3.把current节点变成pre节点 current = next // 4.把next节点变成current节点 } return pre 迭代处理 核心思想:“2”节点后面的额所有元素都进过反转了,但是head“1”节点的next还是指向了“2”,所以可以直接把“2”的next指向head,这样就有反转后的链表了 if head == nil || head....

September 20, 2023

链表双指针

到现在面试经历过很多次了,却很少有成功,之前拒掉了几次面试,现在非常后悔。 这里记录下之前面试的他们的算法题 1. 如何判断一个链表有环 快慢指针可以解决这个问题 使用快慢指针。这里为什么会相遇?最坏的打算当慢指针走一圈的时候,快指针可以走两圈,所以刚好会在同一个点上面。 如果最后指向null,则说明没有环,如果最后走到了相同点,则说明有环。 如何判断该环的起点在什么地方 可以假设 环起点 到相遇点的距离为 m 那么head到 环起点 刚好是 k-m 因为慢指针走了 k 步快指针走了 2k 步相遇了,那么相遇点到快指针的相遇点(N圈之后的相遇点)距离就变成了 2k-k=k 距离一样。那么剪掉相同的环起点到相遇点的 m 都变成了 k-m 步。这样,把任何一个指针的头指针指向 head,用相同的速度,再次相遇点,就是环起点。 2. 两条链表是否相交 要判断两个链表是否相交,可以判断有没有共同部分,那么共同部分怎么判断呢? 最原始的办法:使用map(映射)来记录每个node的信息,java中地址值不存在,可以直接判断引用是否一致。golang可以根据地址是否一致,也可以记录value是否一致(当然存在相同的value的情况就不行了) 使用特殊手法,如下图 双指针同时进行 迭代A链表,结束后,迭代B链表 迭代B链表,结束后,迭代A链表 在迭代的时候,判断两个指针是否一致,如果存在一致 具体代码可以是 p1, p2 := headA, headB for p1 != p2 { if p1 == nil { p1 = headB } else { p1 = p1.Next } if p2 == nil { p2 = headA } else { p2 = p2....

September 19, 2023

JavaAtomic工具类

Atomic*工具类 AtomicBoolean 1. 成员变量 // 对应的类中的成员变量句柄 private static final VarHandle VALUE; // 存储变量的值 private volatile int value; 2. 核心 set时使用句柄(VarHandle)来进行设置value,获取时使用value进行获取 AtomicInteger 1. 成员变量 private static final Unsafe U = Unsafe.getUnsafe(); private static final long VALUE = U.objectFieldOffset(AtomicInteger.class, "value"); private volatile int value; 2.核心 与Boolean类似 AtomicLong 1. 成员变量 Atomic*Array工具类 AtomicIntegerArray 1. 成员变量 private static final VarHandle AA = MethodHandles.arrayElementVarHandle(int[].class); private final int[] array;

August 25, 2023

Mac电脑如何配置有格式的文件夹

# 文件名命名 1. 从下面json多语言化中选择一个Key作为文件夹名 2. 在新建的文件夹名下,创建一个文件`touch .localized` # 下面的文件地址: `/System/Library/CoreServices/SystemFolderLocalizations/zh_CN.lproj` # 现在是二进制的,需要转换为其他格式,命令如下: plutil -convert json SystemFolderLocalizations.strings # 该命令需要有执行权限的地方,不如拷贝到download下 # 更改图标 1. 右击查看“显示简介” 2. 命令行cd到`/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources` 然后输入 `open .` 3. 找到最喜欢的图标,然后`cmd+c`,在简介中的最上面图标点击后`cmd+v` { "Saved Searches": "已存储的搜索", "Relocated Items": "迁移的项目", "Deleted Users": "已删除的用户", "Favorites": "个人收藏", "Public": "公共", "Compositions": "Compositions", "Groups": "群组", "Documents": "文稿", "Sites": "站点", "Network": "网络", "System": "系统", "My Network": "我的网络", "Shared Items": "共享的项目", "My Applications": "我的应用程序", "Movies": "影片", "Mail Downloads": "邮件下载", "Servers": "服务器", "Server": "服务器", "Pictures": "图片", "Shared": "共享", "Recovered files": "恢复的文件", "Configuration": "配置", "Utilities": "实用工具", "Security": "安全性", "Incompatible Software": "不兼容的软件", "Desktop": "桌面", "Music": "音乐", "Faxes": "传真", "Downloads": "下载", "Users": "用户", "Guest": "客人", "Drop Box": "投件箱", "Web Receipts": "网页收据", "Library": "资源库", "Local": "本地", "Applications": "应用程序" }

April 20, 2023

宇宙遐想

以下内容属于遐想,并非真实 ​ 在宇宙诞生之前,存在着无限寿命的灵魂,它们融合后形成了宇宙。这时宇宙中出现了一个强大的“帝国文明”,由于“帝国文明”的庞大,也出现了一些坏人,因此遥远的地球被用作监狱。地球被建立了一个保护罩,防止这些坏人逃离并被植入两个概念:向往光明和留在地球。随着时间的推移,“帝国文明”内部发生动乱,叛乱者也被送到地球监狱。 ​ 由于这些灵魂无法在地球上生存,它们只能寄生于地球上的生物,如类人猿。这些灵魂植入寄生体后,保护罩会封存它们的记忆,并将它们送回地球上进行寄生。 ​ 直到另一个“领地文明”出现后,与“帝国文明”进行了战争,而地球正好位于两个文明的交叉地带。当交战开始时,领地文明发现了地球,想破坏保护罩救出地球上的灵魂。他们派出了3000勇士,但貌似没有成功。在这些勇士的领导下,地球上的苏美尔文明、埃及文明等得以诞生。 ​ 最终,领地文明战胜了帝国文明,但地球不适合灵魂居住,因此领地文明并未继续投入资源,只会巡查并维护整个宇宙的稳定。当地球上出现核信号时,会有飞船来扫描并确认安全后离去。 ​ 而地球外层保护罩存在周期性减弱,当减弱时,会出现一些引领地球快速发展的人物,如牛顿、莱布尼茨、胡克、哈雷、列夫托尔斯泰和亚历山大等。

February 16, 2023