ARTS 0819 打卡
一、(A)算法:
题目: 1 比特与 2 比特字符
有两种特殊字符:
第一种字符可以用一比特
0
表示第二种字符可以用两比特(
10
或11
)表示
给你一个以 0
结尾的二进制数组 bits
,如果最后一个字符必须是一个一比特字符,则返回 true
。
在这里给出两种解法,第一种是自己想出来的解法,第二种是力扣官方解法,
解法一:
思路:遍历一遍数据,按照两种字符的规则去解码字符,并保存解码的字符结果,遍历完成后,判断解码结果,如果结果为字符 1,返回 true,否则返回 false;
Java 代码
这种解法思路比较简单直观,通过解码来找出最后一个字符,然后判断结果。缺点是由于需要保存每次解码的结果创建了列表数据结构,并且中间有许多对于列表的插入和删除操作,会导致空间开销大,性能差,执行速度慢。
解法二:
思路:正序遍历数组,如果 bit[i] 值为 0,则说明找到一个字符一,正常遍历下一个值,若 bit[i] 值为 1 ,说明找到一个字符二,由于字符二是由两个数字组成(10 或 11),那意味着 i+1 位需要跳过,这时需要从 i+2 位开始遍历。由于题中所给的数组最后一位为 0,那么如果遍历到最后位字符 (n-1),则说明这个数组是以字符一结尾的。
二、(R)文章
在合适的时机选择继承还是组合
When to prefer inheritance to composition • Buttondown
三、(T)技术
GitHub - ChrisCavs/aimless.js: The missing JavaScript randomness library.
一个生成各种随机值的 JS 库。
四、(S)观点
前段时间读了刘润的《底层逻辑》,其中对第一节文章印象比较深刻。作者通过一个例子探讨了三种不同的对错观念。
假设 C 负责一个未完工的工地,楼顶有一扇门,门后直接是楼外墙,人走过会掉下去摔死。现在 A 欺骗 B 穿过这个门,B 摔死了,请问是谁的责任?
第一反应说是 A 的责任,因为是 A 欺骗 B 导致 B 摔死,这是妥妥的谋杀行为,那么这种对错观念就是法学家的对错观,证据确凿,行为明确。但是这种对错观念只能做到事后责任界定,不能够起到预防作用。
对于上面的案例,经济学家有不同的看法,是 C 的错。
为什么呢?经济学家是这样想的,整个社会避免 A 被 B 欺骗导致摔死所须付出的成本,远远高于 C 在门上加一个锁的成本。虽然惩罚会让 C 觉得很冤,但是以后所有工地负责人都会把门锁上了,提前预防了此类事件的发生。所以,经济学家总会从“社会总成本”的角度来思考,虽然看上去不太合理,但产生的效果会比纯粹的“判决”来的更加有效。
那么,商人可能会这样想:不管是 A 的错还是 C 的错,B 都死了,不管是谁承担责任,B 都无法起死回生,从个体的利益最大化角度来讲,B 只能怪自己。
上述三种对错观该如何选择?如果你需要评论一件事,可以选择法学家的立场;如果需要制定政策或计划,可以选择经济学家的立场;如果你是那个即将摔死的人,还是建议选择商人立场,因为“我的损失最大”。
评论