最近,一位大廠HR的爆料他們最近面試了一大波年紀超40的求職者。你們猜怎麽著?
這幫人之前在大廠拿的年薪都是80W+,現在竟然只求個月薪1W就好。
你沒聽錯,從年薪80萬到月薪一萬,這轉變得有多大你們感受一下。
這事兒讓我不禁想起那句老話,「黃金屋,顏如玉」,在這職場中,尤其是那些知名大廠,競爭激烈得就像是叢林法則一樣。
這些原本年薪80萬的大佬們,現在為何甘願接受月薪一萬的職位呢?
背後的原因多半是職場中的年齡歧視,還有讓人頭疼的中年危機。在這個更新換代極快的時代,技術人員尤其要面臨新技術的挑戰,一旦跟不上節奏,很容易就被市場淘汰。
所以,這件事給我們的警示是什麽呢?我覺得,首先是作為職場人的我們,要不斷學習,更新自己的知識庫,保持競爭力。另一方面,也希望社會能夠給予我們這些年紀稍大的職場人更多的理解和支持,不要只看年齡,也看看我們的能力和經驗。
下面是今日演算法題
今日演算法題,來自LeetCode的第11題:盛最多水的容器,下面是我的演算法思路及實作,讓我們來看看吧。
# 演算法題目
給定一個長度為 n 的非負整數陣列 height,其中每個元素代表一個點(i, height[i])在座標系中的位置。找出兩條線,它們與 x 軸共同構成一個容器,使得容器可以容納最多的水。
註意:你不能傾斜容器。
# 演算法思路
初始化兩個指標:一個在陣列的開始,另一個在陣列的末尾。
計算當前指標對應的容量:容量計算公式為 min(height[left], height[right]) * (right - left)。
移動指標:為了嘗試找到更大的容量,我們將移動兩個指標中指向較短線段的那一個(因為容器的容量受限於較短的邊)。如果左邊的線段較短,則左指標向右移動;如果右邊的線段較短,則右指標向左移動。
重復步驟2和3,直到兩個指標相遇。
在整個過程中保留最大的容量,這將是我們的最終答案。
# 程式碼實作
C語言實作
#include<stdio.h>
intmaxArea(int* height, int heightSize){
int max_area = 0, left = 0, right = heightSize - 1;
while (left < right) {
int width = right - left;
int h = height[left] < height[right] ? height[left++] : height[right--];
int area = width * h;
if (area > max_area) {
max_area = area;
}
}
return max_area;
}
Java實作
public classSolution{
public int maxArea(int[] height) {
int maxArea = 0, left = 0, right = height.length - 1;
while (left < right) {
int area = Math.min(height[left], height[right]) * (right - left);
maxArea = Math.max(maxArea, area);
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
}
Python實作
def max_area(height):
max_area, left, right = 0, 0, len(height) - 1
whileleft < right:
width = right - left
h = min(height[left], height[right])
max_area = max(max_area, width * h)
if height[left] < height[right]:
left += 1
else:
right -= 1
return max_area
# 演算法解析
本問題的關鍵在於理解如何透過移動較短的線段來增加找到更大容量的機會。這種方法保證了我們能夠在 O(n) 的時間復雜度內檢查每一種可能性,同時避免了不必要的重復計算。
# 範例和測試
假設我們有高度陣列 height = [1,8,6,2,5,4,8,3,7],按照我們的演算法,最大容量為 49。
測試程式碼(Python)
height = [1,8,6,2,5,4,8,3,7]
print("最大容量:", max_area(height))
# 總結
「盛最多水的容器」問題透過雙指標法可以高效解決。這種方法減少了不必要的計算,從而達到了線性時間復雜度,是解決這類問題的一個非常好的範例。
熱門推薦