Skip to content

Commit b88946c

Browse files
authored
Improved tasks 1175, 1620, 2250.
1 parent ddb19e4 commit b88946c

File tree

4 files changed

+55
-122
lines changed
  • src/main/java
    • g1101_1200/s1175_prime_arrangements
    • g1601_1700/s1620_coordinate_with_maximum_network_quality
    • g2201_2300/s2250_count_number_of_rectangles_containing_each_point

4 files changed

+55
-122
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,7 +1337,7 @@
13371337
| 2256 |[Minimum Average Difference](src/main/java/g2201_2300/s2256_minimum_average_difference)| Medium || 15 | 97.85
13381338
| 2255 |[Count Prefixes of a Given String](src/main/java/g2201_2300/s2255_count_prefixes_of_a_given_string)| Easy || 1 | 94.82
13391339
| 2251 |[Number of Flowers in Full Bloom](src/main/java/g2201_2300/s2251_number_of_flowers_in_full_bloom)| Hard || 113 | 69.23
1340-
| 2250 |[Count Number of Rectangles Containing Each Point](src/main/java/g2201_2300/s2250_count_number_of_rectangles_containing_each_point)| Medium || 480 | 67.91
1340+
| 2250 |[Count Number of Rectangles Containing Each Point](src/main/java/g2201_2300/s2250_count_number_of_rectangles_containing_each_point)| Medium || 49 | 98.80
13411341
| 2249 |[Count Lattice Points Inside a Circle](src/main/java/g2201_2300/s2249_count_lattice_points_inside_a_circle)| Medium || 54 | 92.07
13421342
| 2248 |[Intersection of Multiple Arrays](src/main/java/g2201_2300/s2248_intersection_of_multiple_arrays)| Easy || 2 | 99.46
13431343
| 2246 |[Longest Path With Different Adjacent Characters](src/main/java/g2201_2300/s2246_longest_path_with_different_adjacent_characters)| Hard | Array, String, Depth_First_Search, Tree, Graph, Topological_Sort | 75 | 97.79
@@ -1827,7 +1827,7 @@
18271827
| 1624 |[Largest Substring Between Two Equal Characters](src/main/java/g1601_1700/s1624_largest_substring_between_two_equal_characters)| Easy | String, Hash_Table | 1 | 85.13
18281828
| 1622 |[Fancy Sequence](src/main/java/g1601_1700/s1622_fancy_sequence)| Hard | Math, Design, Segment_Tree | 40 | 96.55
18291829
| 1621 |[Number of Sets of K Non-Overlapping Line Segments](src/main/java/g1601_1700/s1621_number_of_sets_of_k_non_overlapping_line_segments)| Medium | Dynamic_Programming, Math | 16 | 94.74
1830-
| 1620 |[Coordinate With Maximum Network Quality](src/main/java/g1601_1700/s1620_coordinate_with_maximum_network_quality)| Medium | Array, Enumeration | 111 | 7.14
1830+
| 1620 |[Coordinate With Maximum Network Quality](src/main/java/g1601_1700/s1620_coordinate_with_maximum_network_quality)| Medium | Array, Enumeration | 58 | 68.75
18311831
| 1619 |[Mean of Array After Removing Some Elements](src/main/java/g1601_1700/s1619_mean_of_array_after_removing_some_elements)| Easy | Array, Sorting | 2 | 99.81
18321832
| 1617 |[Count Subtrees With Max Distance Between Cities](src/main/java/g1601_1700/s1617_count_subtrees_with_max_distance_between_cities)| Hard | Dynamic_Programming, Tree, Bit_Manipulation, Bitmask, Enumeration | 52 | 78.95
18331833
| 1616 |[Split Two Strings to Make Palindrome](src/main/java/g1601_1700/s1616_split_two_strings_to_make_palindrome)| Medium | String, Greedy, Two_Pointers | 4 | 89.77
@@ -2163,7 +2163,7 @@
21632163
| 1179 |[Reformat Department Table](src/main/java/g1101_1200/s1179_reformat_department_table)| Easy | Database | 493 | 64.80
21642164
| 1178 |[Number of Valid Words for Each Puzzle](src/main/java/g1101_1200/s1178_number_of_valid_words_for_each_puzzle)| Hard | Array, String, Hash_Table, Bit_Manipulation, Trie | 139 | 48.41
21652165
| 1177 |[Can Make Palindrome from Substring](src/main/java/g1101_1200/s1177_can_make_palindrome_from_substring)| Medium | String, Hash_Table, Bit_Manipulation, Prefix_Sum | 13 | 93.08
2166-
| 1175 |[Prime Arrangements](src/main/java/g1101_1200/s1175_prime_arrangements)| Easy | Math | 6 | 10.00
2166+
| 1175 |[Prime Arrangements](src/main/java/g1101_1200/s1175_prime_arrangements)| Easy | Math | 0 | 100.00
21672167
| 1172 |[Dinner Plate Stacks](src/main/java/g1101_1200/s1172_dinner_plate_stacks)| Hard | Hash_Table, Stack, Design, Heap_Priority_Queue | 63 | 96.74
21682168
| 1171 |[Remove Zero Sum Consecutive Nodes from Linked List](src/main/java/g1101_1200/s1171_remove_zero_sum_consecutive_nodes_from_linked_list)| Medium | Hash_Table, Linked_List | 2 | 90.39
21692169
| 1170 |[Compare Strings by Frequency of the Smallest Character](src/main/java/g1101_1200/s1170_compare_strings_by_frequency_of_the_smallest_character)| Medium | Array, String, Hash_Table, Sorting, Binary_Search | 7 | 57.89

src/main/java/g1101_1200/s1175_prime_arrangements/readme.md

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -29,44 +29,29 @@ Since the answer may be large, return the answer **modulo `10^9 + 7`**.
2929
## Solution
3030

3131
```java
32-
import java.math.BigInteger;
33-
import java.util.Arrays;
34-
3532
public class Solution {
36-
private static int mod = 1000000007;
37-
3833
public int numPrimeArrangements(int n) {
39-
int numberOfPrimes = generatePrimes(n);
40-
BigInteger x = factorial(numberOfPrimes);
41-
BigInteger y = factorial(n - numberOfPrimes);
42-
return x.multiply(y).mod(BigInteger.valueOf(mod)).intValue();
43-
}
44-
45-
private BigInteger factorial(int n) {
46-
BigInteger fac = BigInteger.ONE;
47-
for (int i = 2; i <= n; i++) {
48-
fac = fac.multiply(BigInteger.valueOf(i));
34+
int[] a = {
35+
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83,
36+
89, 97
37+
};
38+
int c = 0;
39+
while (c < 25 && n >= a[c]) {
40+
c++;
4941
}
50-
return fac.mod(BigInteger.valueOf(mod));
51-
}
52-
53-
private int generatePrimes(int n) {
54-
boolean[] prime = new boolean[n + 1];
55-
Arrays.fill(prime, 2, n + 1, true);
56-
for (int i = 2; i * i <= n; i++) {
57-
if (prime[i]) {
58-
for (int j = i * i; j <= n; j += i) {
59-
prime[j] = false;
60-
}
61-
}
42+
int m = 1000000007;
43+
long res = 1l;
44+
while ((n - c) > 0) {
45+
res *= (n - c);
46+
res %= m;
47+
n--;
6248
}
63-
int count = 0;
64-
for (boolean b : prime) {
65-
if (b) {
66-
count++;
67-
}
49+
while (c > 0) {
50+
res *= c;
51+
res %= m;
52+
c--;
6853
}
69-
return count;
54+
return (int) res;
7055
}
7156
}
7257
```

src/main/java/g1601_1700/s1620_coordinate_with_maximum_network_quality/readme.md

Lines changed: 17 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -63,62 +63,32 @@ No other coordinate has a higher network quality.
6363
```java
6464
public class Solution {
6565
public int[] bestCoordinate(int[][] towers, int radius) {
66-
int minX;
67-
int minY;
68-
int maxX;
69-
int maxY;
70-
minX = minY = Integer.MAX_VALUE;
71-
maxY = maxX = Integer.MIN_VALUE;
72-
if (towers.length == 1 && towers[0][2] != 0) {
73-
int[] arr = new int[2];
74-
arr[0] = towers[0][0];
75-
arr[1] = towers[0][1];
76-
return arr;
77-
} else if (towers.length == 1) {
78-
return new int[2];
79-
}
80-
for (int[] tower : towers) {
81-
minX = Math.min(minX, tower[0]);
82-
maxX = Math.max(maxX, tower[0]);
83-
minY = Math.min(minY, tower[0]);
84-
maxY = Math.max(maxY, tower[0]);
85-
}
86-
minX -= radius;
87-
maxX += radius;
88-
minY -= radius;
89-
maxY += radius;
90-
if (minX < 0) {
91-
minX = 0;
92-
}
93-
if (minY < 0) {
94-
minY = 0;
95-
}
96-
int maxQuality = Integer.MIN_VALUE;
97-
int[] ans = new int[2];
98-
int quality = 0;
99-
for (int i = minX; i <= maxX; i++) {
100-
for (int j = minY; j <= maxY; j++) {
66+
int res[] = new int[2];
67+
double maxQuality = 0;
68+
double quality = 0;
69+
int finalX = 0;
70+
int finalY = 0;
71+
for (int i = 0; i < 51; i++) {
72+
for (int j = 0; j < 51; j++) {
10173
quality = 0;
10274
for (int[] tower : towers) {
103-
double dist =
104-
Math.sqrt(Math.pow((i - tower[0]), 2) + Math.pow((j - tower[1]), 2));
75+
int x = tower[0] - i;
76+
int y = tower[1] - j;
77+
double dist = Math.sqrt(x * x + y * y);
10578
if (dist <= radius) {
106-
quality += (int) Math.floor(tower[2] / (1 + dist));
79+
quality += Math.floor(tower[2] / (1 + dist));
10780
}
10881
}
109-
if (quality > maxQuality) {
82+
if (maxQuality < quality) {
11083
maxQuality = quality;
111-
ans[0] = i;
112-
ans[1] = j;
113-
} else if (quality == maxQuality && i < ans[0]) {
114-
ans[0] = i;
115-
ans[1] = j;
116-
} else if (quality == maxQuality && i == ans[0] && j < ans[1]) {
117-
ans[1] = j;
84+
finalX = i;
85+
finalY = j;
11886
}
11987
}
12088
}
121-
return ans;
89+
res[0] = finalX;
90+
res[1] = finalY;
91+
return res;
12292
}
12393
}
12494
```

src/main/java/g2201_2300/s2250_count_number_of_rectangles_containing_each_point/readme.md

Lines changed: 17 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -66,52 +66,30 @@ Therefore, we return [1, 3].
6666
## Solution
6767

6868
```java
69-
import java.util.ArrayList;
70-
import java.util.Collections;
71-
import java.util.List;
69+
import java.util.Arrays;
7270

73-
@SuppressWarnings("unchecked")
7471
public class Solution {
7572
public int[] countRectangles(int[][] rectangles, int[][] points) {
76-
List<Integer>[] bucket = new ArrayList[101];
77-
for (int i = 1; i <= 100; i++) {
78-
bucket[i] = new ArrayList<>();
73+
int n = rectangles.length;
74+
int q = points.length;
75+
int[][] es = new int[n + q][];
76+
System.arraycopy(rectangles, 0, es, 0, n);
77+
for (int i = 0; i < q; i++) {
78+
es[n + i] = new int[] {points[i][0], points[i][1], i};
7979
}
80-
for (int[] rectangle : rectangles) {
81-
int w = rectangle[0];
82-
int h = rectangle[1];
83-
bucket[h].add(w);
84-
}
85-
for (int i = 1; i <= 100; i++) {
86-
Collections.sort(bucket[i]);
87-
}
88-
int m = points.length;
89-
int[] res = new int[m];
90-
for (int i = 0; i < m; i++) {
91-
int x = points[i][0];
92-
int y = points[i][1];
93-
int count = 0;
94-
for (int h = y; h < bucket.length; h++) {
95-
int index = ceiling(bucket[h], x);
96-
count += bucket[h].size() - index;
97-
}
98-
res[i] = count;
99-
}
100-
return res;
101-
}
102-
103-
private int ceiling(List<Integer> list, int target) {
104-
int left = 0;
105-
int right = list.size();
106-
while (left < right) {
107-
int mid = left + (right - left) / 2;
108-
if (list.get(mid) < target) {
109-
left = mid + 1;
80+
Arrays.sort(es, (x, y) -> x[0] != y[0] ? -(x[0] - y[0]) : x.length - y.length);
81+
int[] ct = new int[101];
82+
int[] ans = new int[q];
83+
for (int[] e : es) {
84+
if (e.length == 2) {
85+
for (int i = 0; i <= e[1]; i++) {
86+
ct[i]++;
87+
}
11088
} else {
111-
right = mid;
89+
ans[e[2]] = ct[e[1]];
11290
}
11391
}
114-
return left;
92+
return ans;
11593
}
11694
}
11795
```

0 commit comments

Comments
 (0)