網(wǎng)友幾年前攢到200萬就辭職回家,打算靠利息過小日子。結(jié)果家人突然重病,幾十萬醫(yī)藥費下去,存款肉眼可見地縮水,只能又硬著頭皮回去上班。
我的看法是: 200萬,對普通家庭來說只是安全墊,不是免死金牌,更不是財務(wù)自由。
靠利息生活聽著很爽,但風險一點都不小。利率會變,物價會上漲,最大的不確定就是“意外和疾病”。你指望一筆存款扛一輩子,其實就是拿整個家庭的未來在賭運氣。
換個角度想,工作有時候不是“熱愛”,但它是你對抗風險的武器,是不斷補血的血袋。與其幻想早點退休,不如先把三件事做好:穩(wěn)定現(xiàn)金流、基礎(chǔ)保險、持續(xù)賺錢能力。
昨天晚上十一點多吧,我在公司樓下抽煙,手機又彈出來一個群消息,“東哥那個顏色分類咋寫啊,我老卡住”…我當時困得不行還嘴硬,說這題不就跟你洗衣服分三堆一樣么,紅的白的藍的,別一件一件先拿去陽臺再回來拿第二件,那不累死,得邊拿邊分,手里還得留個“空位”方便換,對吧。
顏色分類這題其實就三個值 0/1/2(你也可以理解成紅白藍),目標是原地把數(shù)組排成 0 在左,1 在中間,2 在右。很多人第一反應是計數(shù)兩遍,當然也行,但我更喜歡一遍過那個“荷蘭國旗”寫法,原因也簡單:線上你遇到的多半不是“能不能做”,是“能不能穩(wěn)、能不能快、能不能少出幺蛾子”。
你就想象你有三個指針: 一個 left,永遠指著“下一個應該放 0 的坑”; 一個 right,永遠指著“下一個應該放 2 的坑”; 中間有個 i 在掃,像你手伸進洗衣籃子一件一件摸出來。
規(guī)則特別像你在現(xiàn)場指揮搬箱子:
i 看到 0:那就把它跟 left 換一下,left++,i++(因為換過來的東西,left 之前都處理干凈了,放心走)
i 看到 1:啥也別動,i++(1 就待在中間區(qū))
i 看到 2:把它跟 right 換一下,right--,但是 i 先別動(因為從右邊換回來的那個貨你還沒看過,可能又是 2,也可能是 0,急著 i++ 就容易漏)
就這么點事兒,但寫代碼的時候最容易寫錯的就是“換 2 以后 i 要不要++”,很多人線上 bug 就卡這兒,真的…我見過同事把 i++ 寫了,結(jié)果某些輸入直接排序不完整,還以為是 JVM 抽風。
上代碼,java,我寫個干凈點的,你拿去刷題或者塞到項目里都行:
import java.util.Arrays;
publicclassSortColors{
// 顏色分類:0/1/2 原地排序,單趟掃描
publicstaticvoidsortColors(int[] nums){
if (nums == || nums.length <= 1) return;
int left = 0; // [0, left) 都是 0
int right = nums.length - 1; // (right, end] 都是 2
int i = 0; // 當前掃描指針
while (i <= right) {
int v = nums[i];
if (v == 0) {
swap(nums, i, left);
left++;
i++;
} elseif (v == 1) {
i++;
} else { // v == 2
swap(nums, i, right);
right--;
// 注意:這里 i 不自增,因為換回來的值還沒判斷
}
}
}
privatestaticvoidswap(int[] a, int i, int j){
if (i == j) return;
int t = a[i];
a[i] = a[j];
a[j] = t;
}// 隨手測一下
publicstaticvoidmain(String[] args){
int nums = {2, 0, 2, 1, 1, 0};
sortColors(nums);
System.out.println(Arrays.toString(nums)); // [0, 0, 1, 1, 2, 2]
}
}
你看這個 while(i <= right) 也很關(guān)鍵,別寫成 i < nums.length,那樣 right 往左縮的時候你還在傻跑,等于掃過“已經(jīng)確定是 2 的區(qū)域”,白干活還容易越界想不通。
還有個小細節(jié)我一般會跟新人說:這題的“架構(gòu)味”其實在于你能不能把區(qū)間不變量說清楚。left 左邊永遠干凈,right 右邊永遠干凈,中間 i 負責“把未知區(qū)一點點吃掉”。你把這幾個區(qū)想明白,很多雙指針三指針題就突然不玄學了,真的是…就跟你排查線上問題一樣,把邊界畫清楚,剩下都是體力活。
行了我先不扯了,群里還在@我問“為啥換 2 不動 i”,我得去懟兩句,不然他們又要說我講得太快了…哎先這樣。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.