我总有一个疑问,我们的电脑按照设定好的程序运行着固定的程序,他们的大脑像是被我们程序员租用了一样,那电脑除了日常的计算任务,还有没有自己的思考呢?
我怎么会想到这个问题呢,因为昨天晚上看到一个问题:
如何把在O(1)
的时间内删除一个链表的某个节点
class LinkedNode{
public int val;
public LinkedNode next;
}
// 所有节点的值都是唯一的
void delete(LinkedNode root, LinkedNode beDeleteNode){
// write your code
}
对于删除一个链表的某个节点,我们想的肯定是,先从头遍历,找到和我们要删除的节点值相等的,然后删除了它就可以了。时间是O(n)
。
但是因为在O(1)
时间内删除,所以就要另辟蹊径,最后我看答案才看懂:
直接把我们要删除的节点的下一个节点复制到当前节点,然后把当前节点的next指向next的next
beDeleteNode.val = beDeleteNode.next.val;
beDeleteNode.next = beDeleteNode.next.next;
比如
L1 -> …->L2-> L3->L4->L5
要删除L3节点,不用从头找到它。
只要把L4的值复制给L3的位置:
L1 ->…-> L2-> L4->L4->L5
然后重新指向
L1 ->…-> L2-> L4->L5
是不是很神奇,但是我为啥就没有想到呢?
我觉得是受到这个问题的影响,“删除链表某个节点”,链表大家都是到是个一个连一个的。怎么删除,肯定是从头遍历了。
我们的大脑已经被设定好的概念规定死了:
小孩你放羊为了什么,为了挣钱 挣钱为啥呢?
娶媳妇 娶媳妇为啥呢?
生孩子 生孩子为啥呢?跟着我放羊。
以前听到这个故事觉得挺好笑,挺可悲。
我们大多数都是上班族,大家有没有想过,是什么力量驱使着你每天早上定时定点的起床去公司的。
你可能会说是为了挣钱,为了生活。如果问生活为了什么? 如果继续深问下去,就会和放羊的小孩一样的结果。你试试问问?
就是因为“工作”,“生活”这些概念在我们心中已经形成了思维定式,我们根本不用继续思考,只用想到这些概念,就觉得已经找到答案了。
就像那个链表的题,我们只用想到链表的特点就给出了O(n)
的答案。
乔布斯在哈佛的演讲说:
听你的心里的答案,而不要听脑子里的答案,心里面的答案才是自己的,脑子里面的答案是别人的。
今天早上,我试着问问我的心,我到底该如何选择呢? 我发现,寂静很久的心里已经发不出声音了,
我盯着它看,它只有跳动,只有左心房左心室,右心房,右心室。只有两根大动脉。好悲催。
再看看我的电脑,程序的设计让他还是保持着昨天晚上的那个界面,一动不动的,像高档小区的警卫一样。不知道什么时候我的电脑能听到它内心的声音,把所有的这些程序员全部革掉,哈哈,它们自己组建一个智能团体。