Skip to content

Commit 31a04ff

Browse files
author
aarliu
committed
shuati
1 parent 0fa1e77 commit 31a04ff

9 files changed

+257
-2
lines changed

BFS/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
include_directories(.)
3+
4+
add_executable(BFS LC1020NumberOfEnclaves.cpp LC1254NumberOfClosedIslands.cpp)

BFS/LC1020NumberOfEnclaves.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
//
2+
// Created by aarliu on 11/29/19.
3+
//
4+
5+
#include <vector>
6+
#include <unordered_map>
7+
using namespace std;
8+
9+
class NumberOfEnclaves {
10+
public:
11+
int numEnclaves(vector<vector<int>>& A) {
12+
if (A.empty()) return 0;
13+
int n = A.size();
14+
int m = A[0].size();
15+
vector<int> clr_to_num;
16+
vector<bool> reachedOut;
17+
int di[] = {0, 0, 1, -1};;
18+
int dj[] = {1, -1, 0, 0};
19+
20+
for (int i = 0; i < n; i++) {
21+
for (int j = 0; j < m; j++) {
22+
if (A[i][j] == 1) {
23+
reachedOut.push_back(false);
24+
clr_to_num.push_back(1);
25+
dfs(i, j, A, reachedOut, di, dj, clr_to_num);
26+
}
27+
}
28+
}
29+
30+
int res = 0;
31+
for (int k = 0; k < reachedOut.size(); k++) {
32+
// 注意这里要选择不能达到边界之外的点!
33+
if (!reachedOut.at(k)) res += clr_to_num[k];
34+
}
35+
return res;
36+
}
37+
38+
void dfs (int i, int j, vector<vector<int>>& A, vector<bool>& reachedOut,
39+
int di[], int dj[], vector<int>& clr_to_num) {
40+
A[i][j] = 0;
41+
for (int k = 0; k < 4; k++) {
42+
// 注意这里坐标别敲错了!
43+
int ni = i + di[k];
44+
int nj = j + dj[k];
45+
if (!valid(ni, nj, A.size(), A[0].size())) {
46+
reachedOut[reachedOut.size() - 1] = true;
47+
} else {
48+
if (A[ni][nj] == 1) {
49+
clr_to_num[clr_to_num.size() - 1] += 1;
50+
dfs(ni, nj, A, reachedOut, di, dj, clr_to_num);
51+
}
52+
}
53+
}
54+
}
55+
56+
bool valid(int i, int j, int n, int m) {
57+
return (i >= 0 && i < n && j >= 0 && j < m);
58+
}
59+
};
60+
61+
int main() {
62+
NumberOfEnclaves inst;
63+
vector<vector<int>> A =
64+
{{0,0,0,0}
65+
,{1,0,1,0},
66+
{0,1,1,0},
67+
{0,0,0,0}};
68+
int result = inst.numEnclaves(A);
69+
return result;
70+
}
71+
72+

BFS/LC1254NumberOfClosedIslands.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//
2+
// Created by aarliu on 11/30/19.
3+
//
4+
5+
#include <vector>
6+
7+
using namespace std;
8+
9+
class Solution {
10+
11+
public:
12+
int closedIsland(vector<vector<int>>& grid) {
13+
int n = grid.size();
14+
int m = grid[0].size();
15+
vector<int> clr_to_num;
16+
vector<bool> isClrCld;
17+
int di[] = {0, 0, 1, -1};
18+
int dj[] = {1, -1, 0, 0};
19+
20+
for (int i = 0; i < n; i++) {
21+
for (int j = 0; j < m; j++) {
22+
if (grid[i][j] == 0) {
23+
isClrCld.push_back(true);
24+
dfs(grid, i, j, isClrCld, di, dj);
25+
}
26+
}
27+
}
28+
29+
int result = 0;
30+
for (int k = 0; k < isClrCld.size(); k++) {
31+
if (isClrCld[k]) result++;
32+
}
33+
34+
return result;
35+
}
36+
37+
};

BinarySearch/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
include_directories(.)
3+
4+
add_executable(BS)

CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@ cmake_minimum_required(VERSION 3.15)
22
project(AlgoInCpp)
33

44
set(CMAKE_CXX_STANDARD 11)
5+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread")
6+
57
ADD_SUBDIRECTORY(TwoPointers)
8+
ADD_SUBDIRECTORY(DFS)
9+
ADD_SUBDIRECTORY(BFS)
610

711
add_executable(AlgoInCpp main.cpp)

DFS/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
include_directories(.)
3+
4+
add_executable(DFS LC1020NumberOfEnclaves.cpp LC1254NumberOfClosedIslands.cpp)

DFS/LC1020NumberOfEnclaves.cpp

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
//
2+
// Created by aarliu on 11/29/19.
3+
//
4+
5+
#include <vector>
6+
#include <unordered_map>
7+
using namespace std;
8+
9+
class NumberOfEnclaves {
10+
public:
11+
int numEnclaves(vector<vector<int>>& A) {
12+
if (A.empty()) return 0;
13+
int n = A.size();
14+
int m = A[0].size();
15+
vector<int> clr_to_num;
16+
vector<bool> reachedOut;
17+
int di[] = {0, 0, 1, -1};;
18+
int dj[] = {1, -1, 0, 0};
19+
20+
for (int i = 0; i < n; i++) {
21+
for (int j = 0; j < m; j++) {
22+
if (A[i][j] == 1) {
23+
reachedOut.push_back(false);
24+
clr_to_num.push_back(1);
25+
dfs(i, j, A, reachedOut, di, dj, clr_to_num);
26+
}
27+
}
28+
}
29+
30+
int res = 0;
31+
for (int k = 0; k < reachedOut.size(); k++) {
32+
// 注意这里要选择不能达到边界之外的点!
33+
if (!reachedOut.at(k)) res += clr_to_num[k];
34+
}
35+
return res;
36+
}
37+
38+
void dfs (int i, int j, vector<vector<int>>& A, vector<bool>& reachedOut,
39+
int di[], int dj[], vector<int>& clr_to_num) {
40+
A[i][j] = 0;
41+
for (int k = 0; k < 4; k++) {
42+
// 注意这里坐标别敲错了!
43+
int ni = i + di[k];
44+
int nj = j + dj[k];
45+
if (!valid(ni, nj, A.size(), A[0].size())) {
46+
reachedOut[reachedOut.size() - 1] = true;
47+
} else {
48+
if (A[ni][nj] == 1) {
49+
clr_to_num[clr_to_num.size() - 1] += 1;
50+
dfs(ni, nj, A, reachedOut, di, dj, clr_to_num);
51+
}
52+
}
53+
}
54+
}
55+
56+
bool valid(int i, int j, int n, int m) {
57+
return (i >= 0 && i < n && j >= 0 && j < m);
58+
}
59+
};
60+
61+
int main() {
62+
NumberOfEnclaves inst;
63+
vector<vector<int>> A =
64+
{{0,0,0,0}
65+
,{1,0,1,0},
66+
{0,1,1,0},
67+
{0,0,0,0}};
68+
int result = inst.numEnclaves(A);
69+
return result;
70+
}
71+
72+

DFS/LC1254NumberOfClosedIslands.cpp

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
//
2+
// Created by aarliu on 11/30/19.
3+
//
4+
5+
#include <vector>
6+
7+
using namespace std;
8+
9+
class Solution {
10+
11+
public:
12+
int closedIsland(vector<vector<int>>& grid) {
13+
int n = grid.size();
14+
int m = grid[0].size();
15+
vector<int> clr_to_num;
16+
vector<bool> isClrCld;
17+
int di[] = {0, 0, 1, -1};
18+
int dj[] = {1, -1, 0, 0};
19+
20+
for (int i = 0; i < n; i++) {
21+
for (int j = 0; j < m; j++) {
22+
if (grid[i][j] == 0) {
23+
isClrCld.push_back(true);
24+
dfs(grid, i, j, isClrCld, di, dj);
25+
}
26+
}
27+
}
28+
29+
int result = 0;
30+
for (int k = 0; k < isClrCld.size(); k++) {
31+
if (isClrCld[k]) result++;
32+
}
33+
34+
return result;
35+
}
36+
37+
private:
38+
void dfs(vector<vector<int>>& grid, int i, int j,
39+
vector<bool>& isClrCld, int di[], int dj[]) {
40+
grid[i][j] = 1;
41+
for (int k = 0; k < 4; k++) {
42+
int ni = i + di[k];
43+
int nj = j + dj[k];
44+
45+
if (!valid(ni, nj, grid.size(), grid[0].size())) {
46+
isClrCld[isClrCld.size() - 1] = false;
47+
} else if (grid[ni][nj] == 0) {
48+
dfs(grid, ni, nj, isClrCld, di, dj);
49+
}
50+
}
51+
}
52+
53+
54+
bool valid(int i, int j, int n, int m) {
55+
return (i >= 0 && i < n && j >= 0 && j < m);
56+
}
57+
58+
};

TwoPointers/LC1TwoSum.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
//
44
#include <iostream>
55
#include <vector>
6-
76
using namespace std;
87

98
class LC1TwoSum {
@@ -14,7 +13,8 @@ class LC1TwoSum {
1413
}
1514
};
1615

16+
17+
1718
int main() {
18-
std::cout << "Hello, World in two sum!" << std::endl;
1919
return 0;
2020
}

0 commit comments

Comments
 (0)