1000RMB上古平台安装Ollama+Qwen2.5
AI这个东西确实能够提升效率,但是其回答的准确性和可靠性也是参差不齐。 可能也是因为我使用的是基础版,它的智商有限。它能解决一些基础问题。 我问了豆包,硬件配置比较拉,内存DDR3 32G,I7 CPU集显,能跑什么大模型。 结果它推荐的是Ollama+ qwen,最后通过反复的实践,还是选择了Ollama 0.17.4版本[天杀的,这个版本在内地实在没有找到镜像,光是从github下载就花了2h],还好大模型选的是Qwen2.5-7B,配一下地址源,也花了2h。 于是最后搞了2天,最后还问了Gemini才折腾出来。最后的结果就是勉强能跑,性能很拉,毕竟它没有使用显卡做推理,反而使用的是CPU,不仅很耗内存,同时也很耗CPU,客户端用的是page assist,在Chrome装个扩展就OK了。 耗时的原因主要还是上古时期的硬件的配置太低,没有大内存的独立显卡,所以Ollama的版本选择以及大模型的大小都必须好好挑选。
unsetunset火爆的龙虾 OpenClawunsetunset
最近的openclaw也挺火的,还有人花钱安装,小白的我大概了解了一下,
1 硬件需求不高,但是注意token的消耗,取决于你的具体场景,很烧钱
这个openclaw安装并不要求很高的硬件,因为它主要是把用户的请求转发给后台配置的大模型,对的,就是烧token的,这个要注意,有的模型,解析问题需要消耗token,回答问题也需要消耗token,尤其是有的大模型,在你提出问题之后,会呼呼啦啦,输出一堆内容,此时你的token也在消耗。
2 安全性
假如使用的安装包是来路不明的,或者是再次加工的,朋友你最好注意安全风险,因为你毕竟与它交互的时候,涉及到一些系统权限和个人隐私信息,你不会天真的认为,给你安装的人员,他真的懂这些东西吧。它的功能实在是太恐怖了,基于行业内的视角看,这玩意比木马什么的厉害多了,虽然不能进行传统意义上的漏洞攻击,但是进行社会学攻击,也是很大可能的。
3 玩玩可以,别着急,估计后面还有其他的竞品出现。
个人感觉,它的技能在做一些文档的搜集,整理,编辑,运营一些短视频,公众号平台的账号,确实是很高效的。尤其是一些做营销号的朋友,写水文的朋友,更是如虎添翼。
4 云部署的成本估算
各大厂商推出了云服务器,支持openclaw一键部署的,新用户有可能是10~20RMB/Mon,具体要看厂商的活动,后期的均价自己记得看看,应该在40~50RMB/Mon.这个价位的配置2Core2GB,也只是勉强足够你频率不高的使用。大部分博主不会告诉长期的使用费用,因为你大概率也不会支持那么久。
5 商业角度
营造焦虑,产生需求,确实是商业上的一个爆点,的的确确可以收割一波,毕竟太阳底下没有新鲜事,厂商提供基建获益,博主收割流量获益,至于你有没有像博主们赚到收益,那就不好说了。
unsetunset题目unsetunset
Linked List Cycle II 环形链表2
来源于 力扣142给你一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回null如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始),如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 不允许修改 链表。
Example 1:
Input: head = [3,2,0,-4], pos = 1
Output: 返回索引为 1 的节点(值为2的节点)
Example 2:

Input: head = [1,2], pos = 0
Output: 返回索引为 0 的节点(值为1的节点)
Example 3:

Input: head = [1], pos = -1
Output: null
提示:链表中节点的数目范围是 pos 为 -1 或者链表中的一个 有效索引 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?
unsetunset思路unsetunset
见下方
unsetunset暴力unsetunset
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */publicclassSolution{public ListNode detectCycle(ListNode head){ Set<ListNode> set = new HashSet(); ListNode p = head;while(p!=null){if(!set.add(p)) return p; p = p.next; }returnnull; }}
classSolution:defhasCycle(self, head: Optional[ListNode]) -> Optional[ListNode]: seen = set()while head isnotNone :if head in seen:return head seen.add(head) head = head.nextreturnNone
时间复杂度空间复杂度
unsetunset非暴力 快慢指针unsetunset
基于上次的快慢指针,既然它能判环,那么是否可以确定环的入口。 朋友,可以的,这个确实可以。
步骤
- 开始判断环的入口
f,s此刻相遇,指向同一点,将s指向dummy,然后f和s同时推进,直到2者相遇,即为环入口。
重点就在于最后的一步,它是基于一个数学理论的推导。 设 从开始处到环入口距离是a,快慢指针相遇的点是p,那么入口--相遇点的距离是b,那么从相遇点继续到入口是c,环的长度就是b+c。s 移动到相遇点的距离是 a+b, f 的速度是它的2倍,所以f移动了 2(a+b),同时f的距离还满足 a + k(b+c)+b可以得到
结论:从相遇点到入环点的距离加上 k−1圈的环长,恰好等于从链表头部到入环点的距离。k>0
如果你看不懂就对了,因为它不是小学数学的距离等式,而是表示路径同余。如果你是以路径的角度来理解,你是打死也不可能明白,为什么右侧的值一直会变大,还能和左侧相等。
实在不理解,你就记住步骤吧
publicclassSolution{public ListNode detectCycle(ListNode head){if(head==null||head.next==null) returnnull; ListNode dummy = new ListNode(0,head); ListNode f = dummy, s = dummy;while(f!=null&&f.next!=null){ s = s.next; f = f.next.next;if(s==f) break; }if(f==null||f.next==null) returnnull; s = dummy;while(s!=f){ s = s.next; f = f.next; }return s; }}
classSolution:defdetectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:if(head isNoneor head.next isNone):returnNone dummy = ListNode(0,head) f = dummy s = dummy while(f isnotNoneand f.next isnotNone): s = s.next f = f.next.nextif(s==f):breakif(f isNoneor f.next isNone):returnNone s = dummy;while(s!=f): s = s.next f = f.nextreturn s
空间复杂度
unsetunset小结unsetunset
这个快慢指针方法比较难想,弗洛伊德龟兔赛跑算法,判圈的思路是在很多场景下都有出现的。
复查代码,发现上一篇里面py的代码有点错误,估计没人发现。当前的代码排版,一到公众号里面就挤在一起了,好麻烦。