Skip to content

Commit 1a937be

Browse files
add contest for now
1 parent 45d7fc9 commit 1a937be

File tree

1 file changed

+156
-0
lines changed

1 file changed

+156
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package com.fishercoder.solutions;
2+
3+
import com.fishercoder.common.utils.CommonUtils;
4+
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.HashMap;
8+
import java.util.HashSet;
9+
import java.util.List;
10+
import java.util.Map;
11+
import java.util.Set;
12+
13+
public class Contest {
14+
15+
public List<Integer> findSmallestSetOfVertices(int n, List<List<Integer>> edges) {
16+
List<Integer> starts = new ArrayList<>();
17+
Map<Integer, Set<Integer>> indegree = new HashMap<>();
18+
for (int i = 0; i < edges.size(); i++) {
19+
int end = edges.get(i).get(1);
20+
if (!indegree.containsKey(end)) {
21+
indegree.put(end, new HashSet<>());
22+
}
23+
indegree.get(end).add(edges.get(i).get(0));
24+
}
25+
for (int i = 0; i < n; i++) {
26+
if (!indegree.containsKey(i)) {
27+
starts.add(i);
28+
}
29+
}
30+
return starts;
31+
}
32+
33+
public int minOperations(int[] nums) {
34+
Arrays.sort(nums);
35+
int ops = 0;
36+
while (!allZero(nums)) {
37+
if (allEvenAndNonZeroes(nums)) {
38+
nums = half(nums);
39+
ops++;
40+
} else if (hasOdds(nums)) {
41+
int[] result = new int[nums.length];
42+
for (int i = 0; i < nums.length; i++) {
43+
if (nums[i] % 2 != 0) {
44+
result[i] = nums[i] - 1;
45+
ops++;
46+
} else {
47+
result[i] = nums[i];
48+
}
49+
}
50+
nums = result;
51+
} else {
52+
int[] result = new int[nums.length];
53+
for (int i = 0; i < nums.length; i++) {
54+
if (nums[i] != 0) {
55+
result[i] = nums[i] / 2;
56+
} else {
57+
result[i] = nums[i];
58+
}
59+
}
60+
nums = result;
61+
ops++;
62+
}
63+
}
64+
return ops;
65+
}
66+
67+
private boolean hasOdds(int[] nums) {
68+
for (int i : nums) {
69+
if (i % 2 != 0) {
70+
return true;
71+
}
72+
}
73+
return false;
74+
}
75+
76+
private int[] half(int[] nums) {
77+
int[] result = new int[nums.length];
78+
for (int i = 0; i < nums.length; i++) {
79+
result[i] = nums[i] / 2;
80+
}
81+
return result;
82+
}
83+
84+
private boolean allEvenAndNonZeroes(int[] nums) {
85+
for (int i : nums) {
86+
if (i % 2 != 0 || i == 0) {
87+
return false;
88+
}
89+
}
90+
return true;
91+
}
92+
93+
private boolean allZero(int[] nums) {
94+
for (int i : nums) {
95+
if (i != 0) {
96+
return false;
97+
}
98+
}
99+
return true;
100+
}
101+
102+
public boolean containsCycle(char[][] grid) {
103+
int m = grid.length;
104+
int n = grid[0].length;
105+
for (int i = 0; i < m; i++) {
106+
for (int j = 0; j < n; j++) {
107+
boolean[][] visited = new boolean[m][n];
108+
visited[i][j] = true;
109+
if (dfs(i, j, grid, grid[i][j], visited, i, j)) {
110+
return true;
111+
}
112+
}
113+
}
114+
return false;
115+
}
116+
117+
int[] directions = new int[]{0, 1, 0, -1, 0};
118+
private boolean dfs(int i, int j, char[][] grid, char c, boolean[][] visited, int startI, int startJ) {
119+
for (int row = 0; row < directions.length - 1; row++) {
120+
int nextI = i + directions[row];
121+
int nextJ = j + directions[row + 1];
122+
if (nextI >= 0 && nextI < grid.length && nextJ >= 0 && nextJ < grid[0].length && grid[nextI][nextJ] == c) {
123+
if (nextI == startI && nextJ == startJ) {
124+
return true;
125+
} else if (visited[nextI][nextJ]) {
126+
continue;
127+
}
128+
visited[nextI][nextJ] = true;
129+
dfs(nextI, nextJ, grid, c, visited, startI, startJ);
130+
visited[nextI][nextJ] = false;
131+
}
132+
}
133+
return false;
134+
}
135+
136+
public static void main(String... args) {
137+
System.out.println("hello world!");
138+
Contest contest = new Contest();
139+
// System.out.println(contest.thousandSeparator(1234));
140+
// System.out.println(contest.thousandSeparator(0));
141+
// System.out.println(contest.thousandSeparator(123456789));
142+
// System.out.println(contest.thousandSeparator(987));
143+
144+
// System.out.println(contest.findSmallestSetOfVertices(6, Arrays.asList(Arrays.asList(0, 1), Arrays.asList(0, 2), Arrays.asList(2, 5), Arrays.asList(3, 4), Arrays.asList(4, 2))));
145+
// System.out.println(contest.findSmallestSetOfVertices(5, Arrays.asList(Arrays.asList(0, 1), Arrays.asList(2, 1), Arrays.asList(3, 1), Arrays.asList(1, 4), Arrays.asList(2, 4))));
146+
147+
// System.out.println(contest.minOperations(new int[]{1, 5}));//5
148+
// System.out.println(contest.minOperations(new int[]{2, 2}));//3
149+
// System.out.println(contest.minOperations(new int[]{4, 2, 5}));//6
150+
// System.out.println(contest.minOperations(new int[]{3, 2, 2, 4}));//7
151+
// System.out.println(contest.minOperations(new int[]{2, 4, 8, 16}));//8
152+
153+
System.out.println(contest.containsCycle(new char[][]{{'a','a','a','a'}, {'a','b','b','a'}, {'a','b','b','a'}, {'a','a','a','a'}}));
154+
System.out.println("finished.");
155+
}
156+
}

0 commit comments

Comments
 (0)