Skip to content

Commit d7cb423

Browse files
authored
Added tasks 3168-3178
1 parent 7146958 commit d7cb423

File tree

12 files changed

+793
-1
lines changed
  • src/main/java
    • g0201_0300/s0208_implement_trie_prefix_tree
    • g2801_2900/s2836_maximize_value_of_function_in_a_ball_passing_game
    • g3101_3200
      • s3168_minimum_number_of_chairs_in_a_waiting_room
      • s3169_count_days_without_meetings
      • s3170_lexicographically_minimum_string_after_removing_stars
      • s3171_find_subarray_with_bitwise_and_closest_to_k
      • s3174_clear_digits
      • s3175_find_the_first_player_to_win_k_games_in_a_row
      • s3176_find_the_maximum_length_of_a_good_subsequence_i
      • s3177_find_the_maximum_length_of_a_good_subsequence_ii
      • s3178_find_the_child_who_has_the_ball_after_k_seconds

12 files changed

+793
-1
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1816,6 +1816,15 @@
18161816

18171817
| # | Title | Difficulty | Tag | Time, ms | Time, %
18181818
|------|----------------|-------------|-------------|----------|--------
1819+
| 3178 |[Find the Child Who Has the Ball After K Seconds](src/main/java/g3101_3200/s3178_find_the_child_who_has_the_ball_after_k_seconds)| Easy | Math, Simulation | 0 | 100.00
1820+
| 3177 |[Find the Maximum Length of a Good Subsequence II](src/main/java/g3101_3200/s3177_find_the_maximum_length_of_a_good_subsequence_ii)| Hard | Array, Hash_Table, Dynamic_Programming | 11 | 100.00
1821+
| 3176 |[Find the Maximum Length of a Good Subsequence I](src/main/java/g3101_3200/s3176_find_the_maximum_length_of_a_good_subsequence_i)| Medium | Array, Hash_Table, Dynamic_Programming | 4 | 99.70
1822+
| 3175 |[Find The First Player to win K Games in a Row](src/main/java/g3101_3200/s3175_find_the_first_player_to_win_k_games_in_a_row)| Medium | Array, Simulation | 1 | 100.00
1823+
| 3174 |[Clear Digits](src/main/java/g3101_3200/s3174_clear_digits)| Easy | String, Hash_Table, Simulation | 1 | 100.00
1824+
| 3171 |[Find Subarray With Bitwise AND Closest to K](src/main/java/g3101_3200/s3171_find_subarray_with_bitwise_and_closest_to_k)| Hard | Array, Binary_Search, Bit_Manipulation, Segment_Tree | 10 | 98.04
1825+
| 3170 |[Lexicographically Minimum String After Removing Stars](src/main/java/g3101_3200/s3170_lexicographically_minimum_string_after_removing_stars)| Medium | String, Hash_Table, Greedy, Stack, Heap_Priority_Queue | 29 | 99.93
1826+
| 3169 |[Count Days Without Meetings](src/main/java/g3101_3200/s3169_count_days_without_meetings)| Medium | Array, Sorting | 11 | 99.96
1827+
| 3168 |[Minimum Number of Chairs in a Waiting Room](src/main/java/g3101_3200/s3168_minimum_number_of_chairs_in_a_waiting_room)| Easy | String, Simulation | 1 | 100.00
18191828
| 3165 |[Maximum Sum of Subsequence With Non-adjacent Elements](src/main/java/g3101_3200/s3165_maximum_sum_of_subsequence_with_non_adjacent_elements)| Hard | Array, Dynamic_Programming, Divide_and_Conquer, Segment_Tree | 1927 | 87.75
18201829
| 3164 |[Find the Number of Good Pairs II](src/main/java/g3101_3200/s3164_find_the_number_of_good_pairs_ii)| Medium | Array, Hash_Table | 407 | 75.28
18211830
| 3163 |[String Compression III](src/main/java/g3101_3200/s3163_string_compression_iii)| Medium | String | 17 | 88.10

src/main/java/g0201_0300/s0208_implement_trie_prefix_tree/readme.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@ public class Trie {
102102
return startWith;
103103
}
104104
}
105+
106+
/*
107+
* Your Trie object will be instantiated and called as such:
108+
* Trie obj = new Trie();
109+
* obj.insert(word);
110+
* boolean param_2 = obj.search(word);
111+
* boolean param_3 = obj.startsWith(prefix);
112+
*/
105113
```
106114

107115
**Time Complexity (Big O Time):**

src/main/java/g2801_2900/s2836_maximize_value_of_function_in_a_ball_passing_game/readme.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,4 @@ public class Solution {
105105
return ans;
106106
}
107107
}
108-
```
108+
```
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-Java?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-Java)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-Java?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-Java/fork)
3+
4+
## 3168\. Minimum Number of Chairs in a Waiting Room
5+
6+
Easy
7+
8+
You are given a string `s`. Simulate events at each second `i`:
9+
10+
* If `s[i] == 'E'`, a person enters the waiting room and takes one of the chairs in it.
11+
* If `s[i] == 'L'`, a person leaves the waiting room, freeing up a chair.
12+
13+
Return the **minimum** number of chairs needed so that a chair is available for every person who enters the waiting room given that it is initially **empty**.
14+
15+
**Example 1:**
16+
17+
**Input:** s = "EEEEEEE"
18+
19+
**Output:** 7
20+
21+
**Explanation:**
22+
23+
After each second, a person enters the waiting room and no person leaves it. Therefore, a minimum of 7 chairs is needed.
24+
25+
**Example 2:**
26+
27+
**Input:** s = "ELELEEL"
28+
29+
**Output:** 2
30+
31+
**Explanation:**
32+
33+
Let's consider that there are 2 chairs in the waiting room. The table below shows the state of the waiting room at each second.
34+
35+
| Second | Event | People in the Waiting Room | Available Chairs |
36+
|--------|-------|----------------------------|------------------|
37+
| 0 | Enter | 1 | 1 |
38+
| 1 | Leave | 0 | 2 |
39+
| 2 | Enter | 1 | 1 |
40+
| 3 | Leave | 0 | 2 |
41+
| 4 | Enter | 1 | 1 |
42+
| 5 | Enter | 2 | 0 |
43+
| 6 | Leave | 1 | 1 |
44+
45+
**Example 3:**
46+
47+
**Input:** s = "ELEELEELLL"
48+
49+
**Output:** 3
50+
51+
**Explanation:**
52+
53+
Let's consider that there are 3 chairs in the waiting room. The table below shows the state of the waiting room at each second.
54+
55+
| Second | Event | People in the Waiting Room | Available Chairs |
56+
|--------|-------|----------------------------|------------------|
57+
| 0 | Enter | 1 | 2 |
58+
| 1 | Leave | 0 | 3 |
59+
| 2 | Enter | 1 | 2 |
60+
| 3 | Enter | 2 | 1 |
61+
| 4 | Leave | 1 | 2 |
62+
| 5 | Enter | 2 | 1 |
63+
| 6 | Enter | 3 | 0 |
64+
| 7 | Leave | 2 | 1 |
65+
| 8 | Leave | 1 | 2 |
66+
| 9 | Leave | 0 | 3 |
67+
68+
**Constraints:**
69+
70+
* `1 <= s.length <= 50`
71+
* `s` consists only of the letters `'E'` and `'L'`.
72+
* `s` represents a valid sequence of entries and exits.
73+
74+
## Solution
75+
76+
```java
77+
public class Solution {
78+
public int minimumChairs(String s) {
79+
int count = 0;
80+
int ans = Integer.MIN_VALUE;
81+
for (char ch : s.toCharArray()) {
82+
if (ch == 'E') {
83+
count++;
84+
ans = Math.max(ans, count);
85+
} else {
86+
count--;
87+
}
88+
}
89+
return ans;
90+
}
91+
}
92+
```
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-Java?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-Java)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-Java?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-Java/fork)
3+
4+
## 3169\. Count Days Without Meetings
5+
6+
Medium
7+
8+
You are given a positive integer `days` representing the total number of days an employee is available for work (starting from day 1). You are also given a 2D array `meetings` of size `n` where, `meetings[i] = [start_i, end_i]` represents the starting and ending days of meeting `i` (inclusive).
9+
10+
Return the count of days when the employee is available for work but no meetings are scheduled.
11+
12+
**Note:** The meetings may overlap.
13+
14+
**Example 1:**
15+
16+
**Input:** days = 10, meetings = \[\[5,7],[1,3],[9,10]]
17+
18+
**Output:** 2
19+
20+
**Explanation:**
21+
22+
There is no meeting scheduled on the 4<sup>th</sup> and 8<sup>th</sup> days.
23+
24+
**Example 2:**
25+
26+
**Input:** days = 5, meetings = \[\[2,4],[1,3]]
27+
28+
**Output:** 1
29+
30+
**Explanation:**
31+
32+
There is no meeting scheduled on the 5<sup>th</sup> day.
33+
34+
**Example 3:**
35+
36+
**Input:** days = 6, meetings = \[\[1,6]]
37+
38+
**Output:** 0
39+
40+
**Explanation:**
41+
42+
Meetings are scheduled for all working days.
43+
44+
**Constraints:**
45+
46+
* <code>1 <= days <= 10<sup>9</sup></code>
47+
* <code>1 <= meetings.length <= 10<sup>5</sup></code>
48+
* `meetings[i].length == 2`
49+
* `1 <= meetings[i][0] <= meetings[i][1] <= days`
50+
51+
## Solution
52+
53+
```java
54+
import java.util.ArrayList;
55+
import java.util.List;
56+
57+
public class Solution {
58+
public int countDays(int days, int[][] meetings) {
59+
List<int[]> availableDays = new ArrayList<>();
60+
availableDays.add(new int[] {1, days});
61+
// Iterate through each meeting
62+
for (int[] meeting : meetings) {
63+
int start = meeting[0];
64+
int end = meeting[1];
65+
List<int[]> newAvailableDays = new ArrayList<>();
66+
// Iterate through available days and split the intervals
67+
for (int[] interval : availableDays) {
68+
if (start > interval[1] || end < interval[0]) {
69+
// No overlap, keep the interval
70+
newAvailableDays.add(interval);
71+
} else {
72+
// Overlap, split the interval
73+
if (interval[0] < start) {
74+
newAvailableDays.add(new int[] {interval[0], start - 1});
75+
}
76+
if (interval[1] > end) {
77+
newAvailableDays.add(new int[] {end + 1, interval[1]});
78+
}
79+
}
80+
}
81+
availableDays = newAvailableDays;
82+
}
83+
// Count the remaining available days
84+
int availableDaysCount = 0;
85+
for (int[] interval : availableDays) {
86+
availableDaysCount += interval[1] - interval[0] + 1;
87+
}
88+
return availableDaysCount;
89+
}
90+
}
91+
```
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-Java?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-Java)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-Java?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-Java/fork)
3+
4+
## 3170\. Lexicographically Minimum String After Removing Stars
5+
6+
Medium
7+
8+
You are given a string `s`. It may contain any number of `'*'` characters. Your task is to remove all `'*'` characters.
9+
10+
While there is a `'*'`, do the following operation:
11+
12+
* Delete the leftmost `'*'` and the **smallest** non-`'*'` character to its _left_. If there are several smallest characters, you can delete any of them.
13+
14+
Return the lexicographically smallest resulting string after removing all `'*'` characters.
15+
16+
**Example 1:**
17+
18+
**Input:** s = "aaba\*"
19+
20+
**Output:** "aab"
21+
22+
**Explanation:**
23+
24+
We should delete one of the `'a'` characters with `'*'`. If we choose `s[3]`, `s` becomes the lexicographically smallest.
25+
26+
**Example 2:**
27+
28+
**Input:** s = "abc"
29+
30+
**Output:** "abc"
31+
32+
**Explanation:**
33+
34+
There is no `'*'` in the string.
35+
36+
**Constraints:**
37+
38+
* <code>1 <= s.length <= 10<sup>5</sup></code>
39+
* `s` consists only of lowercase English letters and `'*'`.
40+
* The input is generated such that it is possible to delete all `'*'` characters.
41+
42+
## Solution
43+
44+
```java
45+
import java.util.Arrays;
46+
47+
public class Solution {
48+
public String clearStars(String s) {
49+
char[] arr = s.toCharArray();
50+
int[] idxChain = new int[arr.length];
51+
int[] lastIdx = new int[26];
52+
Arrays.fill(idxChain, -1);
53+
Arrays.fill(lastIdx, -1);
54+
for (int i = 0; i < arr.length; i++) {
55+
if (arr[i] == '*') {
56+
for (int j = 0; j < 26; j++) {
57+
if (lastIdx[j] != -1) {
58+
arr[lastIdx[j]] = '#';
59+
lastIdx[j] = idxChain[lastIdx[j]];
60+
break;
61+
}
62+
}
63+
arr[i] = '#';
64+
} else {
65+
idxChain[i] = lastIdx[arr[i] - 'a'];
66+
lastIdx[arr[i] - 'a'] = i;
67+
}
68+
}
69+
StringBuilder sb = new StringBuilder();
70+
for (char c : arr) {
71+
if (c != '#') {
72+
sb.append(c);
73+
}
74+
}
75+
return sb.toString();
76+
}
77+
}
78+
```
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
[![](https://img.shields.io/github/stars/javadev/LeetCode-in-Java?label=Stars&style=flat-square)](https://github.com/javadev/LeetCode-in-Java)
2+
[![](https://img.shields.io/github/forks/javadev/LeetCode-in-Java?label=Fork%20me%20on%20GitHub%20&style=flat-square)](https://github.com/javadev/LeetCode-in-Java/fork)
3+
4+
## 3171\. Find Subarray With Bitwise AND Closest to K
5+
6+
Hard
7+
8+
You are given an array `nums` and an integer `k`. You need to find a subarray of `nums` such that the **absolute difference** between `k` and the bitwise `AND` of the subarray elements is as **small** as possible. In other words, select a subarray `nums[l..r]` such that `|k - (nums[l] AND nums[l + 1] ... AND nums[r])|` is minimum.
9+
10+
Return the **minimum** possible value of the absolute difference.
11+
12+
A **subarray** is a contiguous **non-empty** sequence of elements within an array.
13+
14+
**Example 1:**
15+
16+
**Input:** nums = [1,2,4,5], k = 3
17+
18+
**Output:** 1
19+
20+
**Explanation:**
21+
22+
The subarray `nums[2..3]` has `AND` value 4, which gives the minimum absolute difference `|3 - 4| = 1`.
23+
24+
**Example 2:**
25+
26+
**Input:** nums = [1,2,1,2], k = 2
27+
28+
**Output:** 0
29+
30+
**Explanation:**
31+
32+
The subarray `nums[1..1]` has `AND` value 2, which gives the minimum absolute difference `|2 - 2| = 0`.
33+
34+
**Example 3:**
35+
36+
**Input:** nums = [1], k = 10
37+
38+
**Output:** 9
39+
40+
**Explanation:**
41+
42+
There is a single subarray with `AND` value 1, which gives the minimum absolute difference `|10 - 1| = 9`.
43+
44+
**Constraints:**
45+
46+
* <code>1 <= nums.length <= 10<sup>5</sup></code>
47+
* <code>1 <= nums[i] <= 10<sup>9</sup></code>
48+
* <code>1 <= k <= 10<sup>9</sup></code>
49+
50+
## Solution
51+
52+
```java
53+
public class Solution {
54+
public int minimumDifference(int[] nums, int k) {
55+
int res = Integer.MAX_VALUE;
56+
for (int i = 0; i < nums.length; i++) {
57+
res = Math.min(res, Math.abs(nums[i] - k));
58+
for (int j = i - 1; j >= 0 && (nums[j] & nums[i]) != nums[j]; j--) {
59+
nums[j] &= nums[i];
60+
res = Math.min(res, Math.abs(nums[j] - k));
61+
}
62+
}
63+
return res;
64+
}
65+
}
66+
```

0 commit comments

Comments
 (0)