辛辛苦苦攒了300万,辞职全职投资,全仓买入ETH,亏掉60%只剩120万了,怎么办?不想上班,还能继续躺平吗?
这哪叫躺平啊,这是躺到半路被市场一脚踹醒了。
攒了三百万,本来已经很不容易了,结果一辞职,直接全仓冲进ETH,还想着靠投资过日子。现在跌没六成,账上剩一百二十万,人也不想回去上班,问还能不能继续躺。
这事最扎心的地方不是亏钱,是把“投资”当成“辞职保险”了。打工确实烦,谁不想不上班啊,但不上班的前提是现金流稳,不是把全部家底丢进一个波动大的东西里,然后每天看行情决定心情。
一百二十万说少也不少,真要省着点,能撑一阵。但你要继续靠梭哈翻身,那就不是躺平,是继续赌命。现在最该想的不是面子,也不是“我都辞职了再回去多丢人”,而是先别让这点本金继续乱飞。
车队这题,别上来就模拟车怎么跑
车队这题,最坑的地方不是公式,是你一旦想模拟位置,就基本绕远了。
车在路上跑,快车追上慢车以后不能超过,只能跟着慢车一起到终点。这个限制一加,题就不是“每辆车什么时候到”,而是“后面的车会不会被前面的车拖住”。
我一般看到这种题,第一眼先不看速度大小,先看位置。
离终点越近的车,越像一个“挡板”。后面的车速度再快,也只能追它,追上了就并队,追不上就自己成一队。
比如:
target = 12
position = [10, 8, 0, 5, 3]
speed = [2, 4, 1, 1, 3]
每辆车到终点的时间:
pos=10, speed=2 -> 1
pos=8, speed=4 -> 1
pos=5, speed=1 -> 7
pos=3, speed=3 -> 3
pos=0, speed=1 -> 12
这里不能按原数组看,原数组顺序没意义。
要按位置从大到小看,也就是从最靠近终点的车开始看:
10 -> 8 -> 5 -> 3 -> 0
为什么这么看?
因为前面的车只会影响后面的车,后面的车影响不了前面的车。这个方向一错,代码就会开始补各种判断,越补越丑。
代码我会这么写:
defcarFleet(target: int, position: list[int], speed: list[int]) -> int:
cars = sorted(zip(position, speed), reverse=True)
fleet_count = 0
slowest_time = 0.0
for pos, spd in cars:
arrive_time = (target - pos) / spd
if arrive_time > slowest_time:
fleet_count += 1
slowest_time = arrive_time
return fleet_count
这段代码里最关键的不是排序,也不是除法,是这个判断:
if arrive_time > slowest_time:
如果当前车到终点的时间更长,说明它追不上前面的车,只能自己开成一个新车队。
如果当前车时间更短或者相等,说明它在到终点前能追上前面的车。追上以后就不能超过了,所以它不会新增车队。
这里有个细节,slowest_time 记录的不是全局最慢车,而是当前前方车队的到达时间。
看起来像单调栈,但这题可以不用真写栈。
如果硬写栈,也不是不行:
defcarFleet(target: int, position: list[int], speed: list[int]) -> int:
stack = []
for pos, spd in sorted(zip(position, speed), reverse=True):
t = (target - pos) / spd
stack.append(t)
if len(stack) >= 2and stack[-1] <= stack[-2]:
stack.pop()
return len(stack)
不过我更偏向第一种。栈在这里有点重了,面试里能解释清楚当然没问题,但写代码没必要装复杂。
这题最后就一句话:从离终点最近的车往后扫,只要当前车到达时间比前方车队更久,就多一个车队;否则它会并入前面的车队。
别模拟。模拟车的位置,这题就开始难看了。