程序员老鬼

36岁后端研发,娃两岁,老婆全职带娃,手里一共320万,天津和老家河北小城怎么选?

刚看到个贴子,说一位36岁的后端研发,娃两岁,老婆全职带娃,手里320万,在天津和河北老家之间犹豫。

Image

天津房子贵,怕找不到工作;回老家生活轻松点,但也可能得转行。网友们一半劝他“留在大城市拼一拼”,一半说“老家稳定才是真”。

我觉得这事吧,其实没有标准答案。关键是——你想要什么样的生活。天津可能有更多机会,但也意味着更大压力;老家可能安稳,却也容易被“安稳”困住。像选股票一样,风险和收益永远成正比。

从我的角度看,有娃有家的人,更要考虑现金流和心态的可持续。钱是要赚,但家庭幸福感更值钱。

稳住情绪、保留技能,在哪儿都能过好日子。城市只是背景,过得好不好,关键还是人。【备注:文末可领最新资料】

算法题:多次求和构造目标数组

假设你一开始有一个数组,全是 1,比如长度是 n 的 [1, 1, 1, ..., 1]。 然后你可以做若干次操作,每次挑一个位置 i,把 target[i] 改成当前数组所有元素的和。 最后问你:能不能通过这样不断“求和更新”的操作,构造出目标数组 target?

举个例子:target = [9,3,5]过程大概是这样: 一开始 [1,1,1],总和是 3改第三个位置为 3,得到 [1,1,3]再改第三个位置为 5(此时总和是 5) 然后继续... 最后能不能到 [9,3,5]?

思路分析

一眼看过去好像是从小往大加,但那样推演会非常慢。 一个经典的思路是反向思考——与其从 [1,1,1] 去构造 target,不如反过来: 从 target 反推回 [1,1,1]。

怎么反推? 很简单:如果某个位置的数是由“上一次总和”得到的,那上一步它的值应该是 当前值 - 其他元素之和。 换句话说:

maxVal = 当前数组中最大的数
sum = 所有元素的和
rest = sum - maxVal

那么上一步这个最大值就该是:

maxVal' = maxVal % rest

为什么?因为这相当于不断用 rest 加到它自己上,直到到达 maxVal。 如果 % 之后结果是 0,说明上一步它其实是 rest(否则就永远是 0 了)。

Java 实现

我们可以用一个大根堆(PriorityQueue),每次取出最大的数来反推。

import java.util.PriorityQueue;

publicclassConstructTargetArray{
publicbooleanisPossible(int[] target){
        PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);
long sum = 0;
for (int n : target) {
            pq.add(n);
            sum += n;
        }

while (true) {
int max = pq.poll();
long rest = sum - max;

if (max == 1 || rest == 1) returntrue;
if (rest == 0 || max < rest) returnfalse;

int prev = (int) (max % rest);
if (prev == 0) prev = (int) rest;

            pq.add(prev);
            sum = rest + prev;
        }
    }

publicstaticvoidmain(String[] args){
        ConstructTargetArray obj = new ConstructTargetArray();
        System.out.println(obj.isPossible(newint[]{9, 3, 5})); // true
        System.out.println(obj.isPossible(newint[]{1, 1, 1, 2})); // false
    }
}

核心逻辑

  • 取最大:因为每次求和更新只会让一个数变大,其他数保持不变,所以最大值一定是“最后被更新”的。

  • 反向取模:max % rest 就是回溯前的值。

  • 边界条件:

    • 如果 max == 1 或 rest == 1,说明可以回到 [1,1,...];
    • 如果 rest == 0(全 1 除了一个超大的数),不可能;
    • 如果 max < rest(大数反而小于总和的其他部分),也不可能。

这题其实是贪心 + 反向思维的经典案例。 重点不是推公式,而是理解“求和操作”的本质:一次操作只影响一个数,而总和的增长规律可以逆推回来。 写代码时注意用 long 存 sum,否则会溢出。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

最后给大家分享一份不错的副业资料,点击下方公众号,回复关键字: 副业 领取,也可以链接我领取,微信:hls404