最近一網友發文稱他單位招了個37歲的程式設計師,薪資16000,前後端都幹,一個人能就能把計畫搞定,老板覺得賺翻了。
37歲至少工作10多年了,前後端都能幹的好很正常,大齡程式設計師只是年齡大了,又不是廢了,我覺得大齡程式設計師是最具有價效比的。
網友精彩評論:
--------------下面是今天的演算法題--------------
來看下今天的演算法題,這題是LeetCode的第463題:島嶼的周長。
問題描述
來源:LeetCode第463題
難度:簡單
給定一個 row x col 的二維網格地圖 grid ,其中:grid[i][j] = 1 表示陸地, grid[i][j] = 0 表示水域。
網格中的格子 水平胡垂直 方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有一個島嶼(或者說,一個或多個表示陸地的格子相連組成的島嶼)。
島嶼中沒有「湖」(「湖」 指水域在島嶼內部且不和島嶼周圍的水相連)。格子是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
範例1:
輸入 :grid = [[0,1,0,0],[1,1,1,0],[0,1,0,0],[1,1,0,0]]
輸出 :16
解釋 :它的周長是上面圖片中的 16 個黃色的邊
範例2:
輸入 :grid = [[1]]
輸出 :4
row == grid.length
col == grid[i].length
1 <= row, col <= 100
grid[i][j] 為 0 或 1
問題分析
最近我們已經做過很多關於島嶼的問題了,
今天這題也是關於島嶼的,不過是最簡單的,這題讓計算的是島嶼的周長。我們知道一塊陸地貢獻的周長為 4 ,如果兩個陸地相連,那麽在相連的位置是沒有邊界的,周長就減少了 2 。
我們只需要遍歷所有的位置,遇到一個陸地,周長就增加 4 ,但還需要判斷它的左邊和上邊有沒有和它相連的陸地,如果有一個相連的陸地,周長數量就減 2 。
這裏為什麽只判斷左邊和上邊,比如右邊有相連的陸地,只需要在遍歷右邊那塊陸地的時候減去即可,否則左邊陸地的時候也減就會減兩遍。
JAVA:
publicintislandPerimeter(int[][] grid){
int m = grid.length, n = grid[0].length;
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == 1) {// 陸地
ans += 4;// 一塊陸地有 4 個邊
if (i > 0 && grid[i - 1][j] == 1)
ans -= 2;// 如果左邊也是陸地
if (j > 0 && grid[i][j - 1] == 1)
ans -= 2;// 如果上邊也是陸地
}
}
}
return ans;
}
C++:
public:
intislandPerimeter(vector<vector<int>> &grid){
int m = grid.size(), n = grid[0].size();
int ans = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == 1) {// 陸地
ans += 4;// 一塊陸地有 4 個邊
if (i > 0 && grid[i - 1][j] == 1)
ans -= 2;// 如果左邊也是陸地
if (j > 0 && grid[i][j - 1] == 1)
ans -= 2;// 如果上邊也是陸地
}
}
}
return ans;
}
Python:
defislandPerimeter(self, grid: List[List[int]]) -> int:
m, n = len(grid), len(grid[0])
ans = 0
for i in range(m):
for j in range(n):
if grid[i][j] == 1: # 陸地
ans += 4# 一塊陸地有 4 個邊
if i > 0and grid[i - 1][j] == 1:
ans -= 2# 如果左邊也是陸地
if j > 0and grid[i][j - 1] == 1:
ans -= 2# 如果上邊也是陸地
return ans