Skip to content

Commit 3f4aa70

Browse files
authored
Added tasks 3375-3389
1 parent 37ef1ea commit 3f4aa70

File tree

17 files changed

+1312
-103
lines changed
  • src/main/java
    • g0801_0900
    • g1301_1400/s1329_sort_the_matrix_diagonally
    • g1401_1500/s1408_string_matching_in_an_array
    • g3301_3400
      • s3375_minimum_operations_to_make_array_values_equal_to_k
      • s3376_minimum_time_to_break_locks_i
      • s3377_digit_operations_to_make_two_integers_equal
      • s3378_count_connected_components_in_lcm_graph
      • s3379_transformed_array
      • s3380_maximum_area_rectangle_with_point_constraints_i
      • s3381_maximum_subarray_sum_with_length_divisible_by_k
      • s3382_maximum_area_rectangle_with_point_constraints_ii
      • s3386_button_with_longest_push_time
      • s3387_maximize_amount_after_two_days_of_conversions
      • s3388_count_beautiful_splits_in_an_array
      • s3389_minimum_operations_to_make_character_frequencies_equal

17 files changed

+1312
-103
lines changed

README.md

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -674,7 +674,7 @@
674674

675675
| <!-- --> | <!-- --> | <!-- --> | <!-- --> | <!-- --> | <!-- -->
676676
|-|-|-|-|-|-
677-
| 0976 |[Largest Perimeter Triangle](src/main/java/g0901_1000/s0976_largest_perimeter_triangle)| Easy | Array, Math, Sorting, Greedy | 12 | 26.01
677+
| 0976 |[Largest Perimeter Triangle](src/main/java/g0901_1000/s0976_largest_perimeter_triangle)| Easy | Array, Math, Sorting, Greedy | 7 | 99.33
678678
| 1779 |[Find Nearest Point That Has the Same X or Y Coordinate](src/main/java/g1701_1800/s1779_find_nearest_point_that_has_the_same_x_or_y_coordinate)| Easy | Array | 1 | 100.00
679679

680680
#### Day 4 Loop
@@ -1816,6 +1816,18 @@
18161816

18171817
| # | Title | Difficulty | Tag | Time, ms | Time, %
18181818
|------|----------------|-------------|-------------|----------|--------
1819+
| 3389 |[Minimum Operations to Make Character Frequencies Equal](src/main/java/g3301_3400/s3389_minimum_operations_to_make_character_frequencies_equal)| Hard | String, Hash_Table, Dynamic_Programming, Counting, Enumeration | 4 | 100.00
1820+
| 3388 |[Count Beautiful Splits in an Array](src/main/java/g3301_3400/s3388_count_beautiful_splits_in_an_array)| Medium | Array, Dynamic_Programming | 167 | 70.49
1821+
| 3387 |[Maximize Amount After Two Days of Conversions](src/main/java/g3301_3400/s3387_maximize_amount_after_two_days_of_conversions)| |||
1822+
| 3386 |[Button with Longest Push Time](src/main/java/g3301_3400/s3386_button_with_longest_push_time)| Easy | Array | 0 | 100.00
1823+
| 3382 |[Maximum Area Rectangle With Point Constraints II](src/main/java/g3301_3400/s3382_maximum_area_rectangle_with_point_constraints_ii)| Hard | Array, Math, Sorting, Geometry, Segment_Tree, Binary_Indexed_Tree | 320 | 95.35
1824+
| 3381 |[Maximum Subarray Sum With Length Divisible by K](src/main/java/g3301_3400/s3381_maximum_subarray_sum_with_length_divisible_by_k)| Medium | Array, Hash_Table, Prefix_Sum | 4 | 100.00
1825+
| 3380 |[Maximum Area Rectangle With Point Constraints I](src/main/java/g3301_3400/s3380_maximum_area_rectangle_with_point_constraints_i)| Medium | Array, Math, Sorting, Enumeration, Geometry, Segment_Tree, Binary_Indexed_Tree | 8 | 81.05
1826+
| 3379 |[Transformed Array](src/main/java/g3301_3400/s3379_transformed_array)| Easy | Array, Simulation | 1 | 99.87
1827+
| 3378 |[Count Connected Components in LCM Graph](src/main/java/g3301_3400/s3378_count_connected_components_in_lcm_graph)| Hard | Array, Hash_Table, Math, Union_Find, Number_Theory | 68 | 67.83
1828+
| 3377 |[Digit Operations to Make Two Integers Equal](src/main/java/g3301_3400/s3377_digit_operations_to_make_two_integers_equal)| Medium | Math, Heap_Priority_Queue, Graph, Shortest_Path, Number_Theory | 246 | 38.59
1829+
| 3376 |[Minimum Time to Break Locks I](src/main/java/g3301_3400/s3376_minimum_time_to_break_locks_i)| Medium | Array, Dynamic_Programming, Bit_Manipulation, Backtracking, Bitmask | 3 | 99.63
1830+
| 3375 |[Minimum Operations to Make Array Values Equal to K](src/main/java/g3301_3400/s3375_minimum_operations_to_make_array_values_equal_to_k)| Easy | Array, Hash_Table | 3 | 78.92
18191831
| 3374 |[First Letter Capitalization II](src/main/java/g3301_3400/s3374_first_letter_capitalization_ii)| Hard | Database | 261 | 84.21
18201832
| 3373 |[Maximize the Number of Target Nodes After Connecting Trees II](src/main/java/g3301_3400/s3373_maximize_the_number_of_target_nodes_after_connecting_trees_ii)| Hard | Depth_First_Search, Breadth_First_Search, Tree | 26 | 98.75
18211833
| 3372 |[Maximize the Number of Target Nodes After Connecting Trees I](src/main/java/g3301_3400/s3372_maximize_the_number_of_target_nodes_after_connecting_trees_i)| Medium | Depth_First_Search, Breadth_First_Search, Tree | 50 | 99.49
@@ -3353,7 +3365,7 @@
33533365
| 1411 |[Number of Ways to Paint N × 3 Grid](src/main/java/g1401_1500/s1411_number_of_ways_to_paint_n_3_grid)| Hard | Dynamic_Programming | 14 | 34.91
33543366
| 1410 |[HTML Entity Parser](src/main/java/g1401_1500/s1410_html_entity_parser)| Medium | String, Hash_Table | 19 | 98.92
33553367
| 1409 |[Queries on a Permutation With Key](src/main/java/g1401_1500/s1409_queries_on_a_permutation_with_key)| Medium | Array, Simulation, Binary_Indexed_Tree | 15 | 38.43
3356-
| 1408 |[String Matching in an Array](src/main/java/g1401_1500/s1408_string_matching_in_an_array)| Easy | String, String_Matching | 8 | 24.88
3368+
| 1408 |[String Matching in an Array](src/main/java/g1401_1500/s1408_string_matching_in_an_array)| Easy | String, String_Matching | 1 | 100.00
33573369
| 1407 |[Top Travellers](src/main/java/g1401_1500/s1407_top_travellers)| Easy | LeetCode_Curated_SQL_70, Database, SQL_I_Day_9_Control_of_Flow | 682 | 70.16
33583370
| 1406 |[Stone Game III](src/main/java/g1401_1500/s1406_stone_game_iii)| Hard | Array, Dynamic_Programming, Math, Game_Theory | 14 | 82.02
33593371
| 1405 |[Longest Happy String](src/main/java/g1401_1500/s1405_longest_happy_string)| Medium | String, Greedy, Heap_Priority_Queue | 0 | 100.00
@@ -3425,7 +3437,7 @@
34253437
| 1332 |[Remove Palindromic Subsequences](src/main/java/g1301_1400/s1332_remove_palindromic_subsequences)| Easy | String, Two_Pointers | 0 | 100.00
34263438
| 1331 |[Rank Transform of an Array](src/main/java/g1301_1400/s1331_rank_transform_of_an_array)| Easy | Array, Hash_Table, Sorting | 22 | 98.50
34273439
| 1330 |[Reverse Subarray To Maximize Array Value](src/main/java/g1301_1400/s1330_reverse_subarray_to_maximize_array_value)| Hard | Array, Math, Greedy | 9 | 88.00
3428-
| 1329 |[Sort the Matrix Diagonally](src/main/java/g1301_1400/s1329_sort_the_matrix_diagonally)| Medium | Array, Sorting, Matrix | 15 | 26.03
3440+
| 1329 |[Sort the Matrix Diagonally](src/main/java/g1301_1400/s1329_sort_the_matrix_diagonally)| Medium | Array, Sorting, Matrix | 0 | 100.00
34293441
| 1328 |[Break a Palindrome](src/main/java/g1301_1400/s1328_break_a_palindrome)| Medium | String, Greedy | 0 | 100.00
34303442
| 1327 |[List the Products Ordered in a Period](src/main/java/g1301_1400/s1327_list_the_products_ordered_in_a_period)| Easy | Database | 1374 | 80.18
34313443
| 1326 |[Minimum Number of Taps to Open to Water a Garden](src/main/java/g1301_1400/s1326_minimum_number_of_taps_to_open_to_water_a_garden)| Hard | Array, Dynamic_Programming, Greedy | 3 | 90.04
@@ -3679,7 +3691,7 @@
36793691
| 0979 |[Distribute Coins in Binary Tree](src/main/java/g0901_1000/s0979_distribute_coins_in_binary_tree)| Medium | Depth_First_Search, Tree, Binary_Tree | 0 | 100.00
36803692
| 0978 |[Longest Turbulent Subarray](src/main/java/g0901_1000/s0978_longest_turbulent_subarray)| Medium | Array, Dynamic_Programming, Sliding_Window | 7 | 48.10
36813693
| 0977 |[Squares of a Sorted Array](src/main/java/g0901_1000/s0977_squares_of_a_sorted_array)| Easy | Array, Sorting, Two_Pointers, Algorithm_I_Day_2_Two_Pointers, Udemy_Two_Pointers | 1 | 100.00
3682-
| 0976 |[Largest Perimeter Triangle](src/main/java/g0901_1000/s0976_largest_perimeter_triangle)| Easy | Array, Math, Sorting, Greedy, Programming_Skills_I_Day_3_Conditional_Statements | 12 | 26.01
3694+
| 0976 |[Largest Perimeter Triangle](src/main/java/g0901_1000/s0976_largest_perimeter_triangle)| Easy | Array, Math, Sorting, Greedy, Programming_Skills_I_Day_3_Conditional_Statements | 7 | 99.33
36833695
| 0975 |[Odd Even Jump](src/main/java/g0901_1000/s0975_odd_even_jump)| Hard | Array, Dynamic_Programming, Stack, Ordered_Set, Monotonic_Stack | 49 | 98.38
36843696
| 0974 |[Subarray Sums Divisible by K](src/main/java/g0901_1000/s0974_subarray_sums_divisible_by_k)| Medium | Array, Hash_Table, Prefix_Sum | 3 | 99.95
36853697
| 0973 |[K Closest Points to Origin](src/main/java/g0901_1000/s0973_k_closest_points_to_origin)| Medium | Array, Math, Sorting, Heap_Priority_Queue, Divide_and_Conquer, Geometry, Quickselect, Data_Structure_II_Day_21_Heap_Priority_Queue, Programming_Skills_II_Day_8 | 4 | 98.26
@@ -3785,8 +3797,8 @@
37853797
| 0873 |[Length of Longest Fibonacci Subsequence](src/main/java/g0801_0900/s0873_length_of_longest_fibonacci_subsequence)| Medium | Array, Hash_Table, Dynamic_Programming | 120 | 92.64
37863798
| 0872 |[Leaf-Similar Trees](src/main/java/g0801_0900/s0872_leaf_similar_trees)| Easy | Depth_First_Search, Tree, Binary_Tree | 0 | 100.00
37873799
| 0871 |[Minimum Number of Refueling Stops](src/main/java/g0801_0900/s0871_minimum_number_of_refueling_stops)| Hard | Array, Dynamic_Programming, Greedy, Heap_Priority_Queue | 3 | 88.52
3788-
| 0870 |[Advantage Shuffle](src/main/java/g0801_0900/s0870_advantage_shuffle)| Medium | Array, Sorting, Greedy | 188 | 28.01
3789-
| 0869 |[Reordered Power of 2](src/main/java/g0801_0900/s0869_reordered_power_of_2)| Medium | Math, Sorting, Counting, Enumeration | 9 | 25.97
3800+
| 0870 |[Advantage Shuffle](src/main/java/g0801_0900/s0870_advantage_shuffle)| Medium | Array, Sorting, Greedy | 42 | 99.16
3801+
| 0869 |[Reordered Power of 2](src/main/java/g0801_0900/s0869_reordered_power_of_2)| Medium | Math, Sorting, Counting, Enumeration | 1 | 89.02
37903802
| 0868 |[Binary Gap](src/main/java/g0801_0900/s0868_binary_gap)| Easy | Bit_Manipulation | 1 | 82.94
37913803
| 0867 |[Transpose Matrix](src/main/java/g0801_0900/s0867_transpose_matrix)| Easy | Array, Matrix, Simulation | 1 | 60.83
37923804
| 0866 |[Prime Palindrome](src/main/java/g0801_0900/s0866_prime_palindrome)| Medium | Math | 2 | 84.68

src/main/java/g0801_0900/s0869_reordered_power_of_2/readme.md

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -28,37 +28,53 @@ Return `true` _if and only if we can do this so that the resulting number is a p
2828
## Solution
2929

3030
```java
31-
import java.util.HashMap;
32-
import java.util.Map;
33-
import java.util.Objects;
31+
import java.util.Arrays;
3432

3533
public class Solution {
3634
public boolean reorderedPowerOf2(int n) {
37-
int i = 0;
38-
while (Math.pow(2, i) < (long) n * 10) {
39-
if (isValid(String.valueOf((int) (Math.pow(2, i++))), String.valueOf(n))) {
35+
int[] originalDigits = countDigits(n);
36+
int num = 1;
37+
for (int i = 0; i < 31; i++) {
38+
if (Arrays.equals(originalDigits, countDigits(num))) {
4039
return true;
4140
}
41+
num <<= 1;
4242
}
4343
return false;
4444
}
4545

46-
private boolean isValid(String a, String b) {
47-
Map<Character, Integer> m = new HashMap<>();
48-
Map<Character, Integer> mTwo = new HashMap<>();
49-
for (char c : a.toCharArray()) {
50-
m.put(c, m.containsKey(c) ? m.get(c) + 1 : 1);
46+
private int noOfDigits(int n) {
47+
if (n == 0) {
48+
return 1;
5149
}
52-
for (char c : b.toCharArray()) {
53-
mTwo.put(c, mTwo.containsKey(c) ? mTwo.get(c) + 1 : 1);
50+
return (int) Math.log10(Math.abs(n)) + 1;
51+
}
52+
53+
private boolean check(int num1, int num2) {
54+
int[] num = new int[10];
55+
while (num1 > 0) {
56+
num[num1 % 10]++;
57+
num1 /= 10;
58+
}
59+
while (num2 > 0) {
60+
num[num2 % 10]--;
61+
num2 /= 10;
5462
}
55-
for (Map.Entry<Character, Integer> entry : mTwo.entrySet()) {
56-
if (!m.containsKey(entry.getKey())
57-
|| !Objects.equals(entry.getValue(), m.get(entry.getKey()))) {
63+
for (int i = 0; i < 10; i++) {
64+
if (num[i] != 0) {
5865
return false;
5966
}
6067
}
61-
return a.charAt(0) != '0' && m.size() == mTwo.size();
68+
return true;
69+
}
70+
71+
private int[] countDigits(int num) {
72+
int[] digitCount = new int[10];
73+
while (num > 0) {
74+
digitCount[num % 10]++;
75+
num /= 10;
76+
}
77+
return digitCount;
6278
}
6379
}
6480
```

src/main/java/g0801_0900/s0870_advantage_shuffle/readme.md

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -30,59 +30,60 @@ Return _any permutation of_ `nums1` _that maximizes its **advantage** with respe
3030
## Solution
3131

3232
```java
33-
import java.util.ArrayDeque;
3433
import java.util.ArrayList;
3534
import java.util.Arrays;
36-
import java.util.Deque;
37-
import java.util.HashMap;
3835
import java.util.List;
39-
import java.util.PriorityQueue;
4036

41-
@SuppressWarnings("java:S5413")
4237
public class Solution {
4338
public int[] advantageCount(int[] nums1, int[] nums2) {
44-
PriorityQueue<Integer> pque = new PriorityQueue<>();
45-
for (int e : nums1) {
46-
pque.add(e);
47-
}
48-
int l = nums1.length;
49-
HashMap<Integer, List<Integer>> map = new HashMap<>();
50-
int[] n = new int[l];
51-
System.arraycopy(nums2, 0, n, 0, l);
52-
Arrays.sort(n);
53-
Deque<Integer> sta = new ArrayDeque<>();
54-
for (int i = 0; i < l && !pque.isEmpty(); i++) {
55-
List<Integer> p = map.getOrDefault(n[i], new ArrayList<>());
56-
int x = pque.poll();
57-
if (x > n[i]) {
58-
p.add(x);
59-
map.put(n[i], p);
39+
Arrays.sort(nums1);
40+
int[] result = new int[nums1.length];
41+
int low = 0;
42+
boolean[] chosen = new boolean[nums1.length];
43+
for (int i = 0; i < nums2.length; i++) {
44+
int pos = binSearch(nums1, nums2[i], low, chosen);
45+
if (pos != -1 && pos < nums1.length) {
46+
result[i] = nums1[pos];
47+
chosen[pos] = true;
6048
} else {
61-
while (x <= n[i] && !pque.isEmpty()) {
62-
sta.push(x);
63-
x = pque.poll();
64-
}
65-
if (x > n[i]) {
66-
p.add(x);
67-
map.put(n[i], p);
68-
} else {
69-
sta.push(x);
70-
}
49+
result[i] = -1;
7150
}
7251
}
73-
for (int i = 0; i < nums2.length; i++) {
74-
List<Integer> p = map.getOrDefault(nums2[i], new ArrayList<>());
75-
int t;
76-
if (!p.isEmpty()) {
77-
t = p.get(0);
78-
p.remove(0);
79-
map.put(nums2[i], p);
52+
List<Integer> pos = new ArrayList<>();
53+
int i = 0;
54+
for (boolean ch : chosen) {
55+
if (!ch) {
56+
pos.add(i);
57+
}
58+
i++;
59+
}
60+
int index = 0;
61+
for (i = 0; i < result.length; i++) {
62+
if (result[i] == -1) {
63+
result[i] = nums1[pos.get(index)];
64+
index++;
65+
}
66+
}
67+
return result;
68+
}
69+
70+
private int binSearch(int[] nums, int target, int low, boolean[] chosen) {
71+
int high = nums.length - 1;
72+
while (high >= low) {
73+
int mid = high - (high - low) / 2;
74+
if (nums[mid] > target && (mid == 0 || nums[mid - 1] <= target)) {
75+
while (mid < nums.length && chosen[mid]) {
76+
mid++;
77+
}
78+
return mid;
79+
}
80+
if (nums[mid] > target) {
81+
high = mid - 1;
8082
} else {
81-
t = sta.pop();
83+
low = mid + 1;
8284
}
83-
nums1[i] = t;
8485
}
85-
return nums1;
86+
return -1;
8687
}
8788
}
8889
```

src/main/java/g1301_1400/s1329_sort_the_matrix_diagonally/readme.md

Lines changed: 24 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -33,41 +33,35 @@ Given an `m x n` matrix `mat` of integers, sort each **matrix diagonal** in asce
3333
## Solution
3434

3535
```java
36-
import java.util.ArrayList;
37-
import java.util.Collections;
38-
import java.util.List;
39-
4036
public class Solution {
41-
public int[][] diagonalSort(int[][] mat) {
42-
int m = mat.length;
43-
int n = mat[0].length;
44-
int[][] sorted = new int[m][n];
45-
for (int i = m - 1; i >= 0; i--) {
46-
int iCopy = i;
47-
List<Integer> list = new ArrayList<>();
48-
for (int j = 0; j < n && iCopy < m; j++, iCopy++) {
49-
list.add(mat[iCopy][j]);
50-
}
51-
Collections.sort(list);
52-
iCopy = i;
53-
for (int j = 0; j < n && iCopy < m; j++, iCopy++) {
54-
sorted[iCopy][j] = list.get(j);
37+
private int[] count = new int[101];
38+
private int m;
39+
private int n;
40+
41+
public void search(int[][] mat, int i, int j) {
42+
for (int ti = i, tj = j; ti < m && tj < n; ti++, tj++) {
43+
count[mat[ti][tj]]++;
44+
}
45+
int c = 0;
46+
for (int ti = i, tj = j; ti < m && tj < n; ti++, tj++) {
47+
while (count[c] == 0) {
48+
c++;
5549
}
50+
mat[ti][tj] = c;
51+
count[c]--;
5652
}
53+
}
5754

58-
for (int j = n - 1; j > 0; j--) {
59-
int jCopy = j;
60-
List<Integer> list = new ArrayList<>();
61-
for (int i = 0; i < m && jCopy < n; i++, jCopy++) {
62-
list.add(mat[i][jCopy]);
63-
}
64-
Collections.sort(list);
65-
jCopy = j;
66-
for (int i = 0; i < m && jCopy < n; i++, jCopy++) {
67-
sorted[i][jCopy] = list.get(i);
68-
}
55+
public int[][] diagonalSort(int[][] mat) {
56+
m = mat.length;
57+
n = mat[0].length;
58+
for (int i = 0; i < m; i++) {
59+
search(mat, i, 0);
60+
}
61+
for (int i = 1; i < n; i++) {
62+
search(mat, 0, i);
6963
}
70-
return sorted;
64+
return mat;
7165
}
7266
}
7367
```

src/main/java/g1401_1500/s1408_string_matching_in_an_array/readme.md

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,30 @@ String `words[i]` is substring of `words[j]`, if can be obtained removing some c
4242

4343
```java
4444
import java.util.ArrayList;
45-
import java.util.HashSet;
4645
import java.util.List;
47-
import java.util.Set;
4846

4947
public class Solution {
5048
public List<String> stringMatching(String[] words) {
51-
Set<String> set = new HashSet<>();
52-
for (String word : words) {
53-
for (String s : words) {
54-
if (!word.equals(s) && word.length() < s.length() && s.contains(word)) {
55-
set.add(word);
56-
}
49+
List<String> matchedStrings = new ArrayList<>();
50+
for (int i = 0; i < words.length; i++) {
51+
boolean containsSubstring = checkContains(words, i);
52+
if (containsSubstring) {
53+
matchedStrings.add(words[i]);
5754
}
5855
}
59-
return new ArrayList<>(set);
56+
return matchedStrings;
57+
}
58+
59+
private boolean checkContains(String[] words, int index) {
60+
for (int j = 0; j < words.length; j++) {
61+
if (index == j) {
62+
continue;
63+
}
64+
if (words[j].contains(words[index])) {
65+
return true;
66+
}
67+
}
68+
return false;
6069
}
6170
}
6271
```

0 commit comments

Comments
 (0)