Swif演算法學習 島嶼周長問題

2021-10-10 03:03:38 字數 1368 閱讀 6058

一 問題描述

給定乙個包含 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的過程,定義三個...