一 問題描述
給定乙個包含 0 和 1 的二維網格地圖,其中 1 表示陸地 0 表示水域。
網格中的格仔水平和垂直方向相連(對角線方向不相連)。整個網格被水完全包圍,但其中恰好有乙個島嶼(或者說,乙個或多個表示陸地的格仔相連組成的島嶼)。
島嶼中沒有「湖」(「湖」 指水域在島嶼內部且不和島嶼周圍的水相連)。格仔是邊長為 1 的正方形。網格為長方形,且寬度和高度均不超過 100 。計算這個島嶼的周長。
示例 :
[[0
,1,0
,0],
[1,1
,1,0
],[0
,1,0
,0],
[1,1
,0,0
]]
輸出: 16
二.解題思路
2.1 方法一 :排除加
思維邏輯
設定 最終結果為 sum,初始化 sum =0
迴圈遍歷二維陣列,判斷二維陣列中當前數值是否等於1,等於則執行,判斷當前區域(數值)上、下、左、右是否為0或當前是否是邊境值,滿足兩個中任意乙個條件 sum+=1,返回sum即為結果。
swift**實現過程
。
func
islandperimeter
(grid:[[
int]])
->
intif bottom>grid.
count-1
||grid[bottom]
[j]==0if
left
<
0||grid[i]
[left]==
0ifright
>grid[i]
.count-1
||grid[i]
[right]==
0}}}
return sum
}
2.1 方法二 和一減
思維邏輯
設定 最終結果為 sum,初始化 sum =0
迴圈遍歷二維陣列,判斷二維陣列中當前數值是否等於1,等於則執行sum+=4處理,並判斷當前區域(數值)上、左是否為1以及當前是否是非邊境值,同時滿足兩個條件 sum-=2,返回sum即為結果。
swift**實現過程
。
func
islandperimeter
(_ grid:[[
int]])
->
intif j>
0&&grid[i]
[last_left]==1
}}}return sum
}
排序問題 演算法學習
排序方法分狠多,可分為外部排序和內部排序。內部排序可分為 插入排序 交換排序 歸併排序 堆排序 基數排序。分析各種排序演算法的優劣有演算法 時間複雜度和執行演算法所需的附加空間。1.插入排序 演算法中引進的附加a 0 稱監視哨或哨兵。哨兵有兩個作用 1 在進入查詢 插入位置 迴圈之前,它儲存了a i...
演算法學習A B問題
一開始不會做,後來查了資料也不太看明白,還以為跟全加器有什麼關係,後來弄懂後發現有一點關係但也不是很大,所以在這裡寫乙個詳解 的 public int aplusb int a,int b else 使用位運算子去計算a b實際只有兩步,一步計算本位的和,一步計算進製的值,遞迴直到進製為0為止 設i...
演算法學習 荷蘭國旗問題
題目 現有紅 白 藍三個不同顏色的小球,亂序排列在一起,請重新排列這些小球,使得紅白藍三色的同顏色的球在一起。問題分析 問題轉換為 給定陣列a 0.n 1 元素只能取0 1 2三個值,設計演算法,使得陣列排列成 00.0011.1122.22 的形式 借鑑快速排序中partition的過程,定義三個...