Skip to content

Commit 208ccbf

Browse files
authored
Merge pull request #1477 from sora0319/main
[sora0319] Week 07 solutions
2 parents 395b5bc + 05ef73e commit 208ccbf

File tree

5 files changed

+207
-0
lines changed

5 files changed

+207
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class Solution {
2+
public int lengthOfLongestSubstring(String s) {
3+
Map<Character, Integer> characters = new HashMap<>();
4+
int maxLength = 0;
5+
int length = 0;
6+
int start = 0;
7+
8+
for(int i = 0; i < s.length(); i++){
9+
if(!characters.containsKey(s.charAt(i))){
10+
characters.put(s.charAt(i), i);
11+
length++;
12+
}
13+
else{
14+
maxLength = Math.max(length, maxLength);
15+
16+
int place = characters.get(s.charAt(i));
17+
if(place < start){
18+
characters.put(s.charAt(i), i);
19+
length++;
20+
continue;
21+
}
22+
23+
length = i - place;
24+
start = place + 1;
25+
characters.put(s.charAt(i), i);
26+
}
27+
}
28+
maxLength = Math.max(length, maxLength);
29+
30+
return maxLength;
31+
}
32+
}
33+

number-of-islands/sora0319.java

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public int numIslands(char[][] grid) {
3+
Queue<Pair> island = new LinkedList<>();
4+
int N = grid.length;
5+
int M = grid[0].length;
6+
boolean[][] visited = new boolean[N][M];
7+
int count = 0;
8+
9+
for(int i = 0; i < N; i++){
10+
for(int j = 0; j < M; j++){
11+
if(!visited[i][j] && grid[i][j] == '1'){
12+
island.offer(new Pair(i, j));
13+
visited[i][j] = true;
14+
bfs(grid, visited, island);
15+
count++;
16+
}
17+
}
18+
}
19+
return count;
20+
}
21+
public void bfs(char[][] grid, boolean[][] visited, Queue<Pair> island){
22+
int[] mx = {-1, 1, 0, 0};
23+
int[] my = {0, 0, -1, 1};
24+
25+
26+
while(!island.isEmpty()){
27+
Pair p = island.poll();
28+
for(int i = 0; i < 4; i++){
29+
int nx = mx[i] + p.x;
30+
int ny = my[i] + p.y;
31+
32+
if(nx < 0 || ny < 0|| nx >= grid.length || ny >= grid[0].length) continue;
33+
if(visited[nx][ny] || grid[nx][ny] == '0') continue;
34+
35+
island.offer(new Pair(nx, ny));
36+
visited[nx][ny] = true;
37+
}
38+
39+
}
40+
}
41+
42+
class Pair{
43+
int x;
44+
int y;
45+
Pair(int x, int y){
46+
this.x = x;
47+
this.y = y;
48+
}
49+
}
50+
}
51+

reverse-linked-list/sora0319.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public ListNode reverseList(ListNode head) {
13+
if(head == null) return null;
14+
15+
ListNode backward = null;
16+
ListNode forward = head;
17+
18+
while(forward != null){
19+
forward = head.next;
20+
head.next = backward;
21+
backward = head;
22+
if(forward != null) head = forward;
23+
}
24+
25+
return head;
26+
}
27+
}
28+

set-matrix-zeroes/sora0319.java

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public void setZeroes(int[][] matrix) {
3+
int M = matrix.length;
4+
int N = matrix[0].length;
5+
6+
boolean firstRow = false;
7+
boolean firstCol = false;
8+
9+
for(int i = 0; i < M; i++){
10+
if(matrix[i][0] == 0){
11+
firstRow = true;
12+
break;
13+
}
14+
}
15+
16+
for(int j = 0; j < N; j++){
17+
if(matrix[0][j] == 0){
18+
firstCol = true;
19+
break;
20+
}
21+
}
22+
23+
for(int i = 0; i < M; i++){
24+
for(int j = 0; j < N; j++){
25+
if(matrix[i][j] == 0){
26+
matrix[i][0] = 0;
27+
matrix[0][j] = 0;
28+
}
29+
}
30+
}
31+
32+
for(int i = 1; i < M; i++){
33+
for(int j = 1; j < N; j++){
34+
if(matrix[i][0] == 0 || matrix[0][j] == 0) matrix[i][j] = 0;
35+
}
36+
}
37+
38+
if(firstRow){
39+
for(int i = 0; i < M; i++){
40+
matrix[i][0] = 0;
41+
}
42+
}
43+
44+
if(firstCol){
45+
for(int j = 0; j < N; j++){
46+
matrix[0][j] = 0;
47+
}
48+
}
49+
}
50+
}
51+

unique-paths/sora0319.java

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Solution {
2+
public int uniquePaths(int m, int n) {
3+
int[][] pathN = new int[m][n];
4+
boolean[][] visited = new boolean[m][n];
5+
pathN[0][0] = 1;
6+
7+
bfs(pathN, visited);
8+
return pathN[m-1][n-1];
9+
}
10+
public void bfs(int[][] pathN, boolean[][] visited){
11+
Queue<Pair> paths = new LinkedList<>();
12+
int[] mx = {0, 1};
13+
int[] my = {1, 0};
14+
15+
paths.offer(new Pair(0,0));
16+
17+
while(!paths.isEmpty()){
18+
Pair p = paths.poll();
19+
20+
for(int i = 0; i < 2; i++){
21+
int nx = mx[i] + p.x;
22+
int ny = my[i] + p.y;
23+
24+
if(nx >= pathN.length || ny >= pathN[0].length) continue;
25+
pathN[nx][ny] += pathN[p.x][p.y];
26+
if(!visited[nx][ny]){
27+
paths.offer(new Pair(nx, ny));
28+
visited[nx][ny] = true;
29+
}
30+
31+
}
32+
}
33+
}
34+
35+
class Pair{
36+
int x;
37+
int y;
38+
Pair(int x, int y){
39+
this.x = x;
40+
this.y = y;
41+
}
42+
}
43+
}
44+

0 commit comments

Comments
 (0)