Skip to content

Commit e41b794

Browse files
committed
Added task 3475
1 parent 29b4dee commit e41b794

File tree

4 files changed

+232
-3
lines changed

4 files changed

+232
-3
lines changed

src/main/java/g3401_3500/s3462_maximum_sum_with_at_most_k_elements/Solution.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package g3401_3500.s3462_maximum_sum_with_at_most_k_elements;
22

3-
// #Medium #Array #Sorting #Greedy #Matrix #Heap_(Priority_Queue)
3+
// #Medium #Array #Sorting #Greedy #Matrix #Heap_Priority_Queue
44
// #2025_02_25_Time_62_ms_(99.82%)_Space_78.09_MB_(20.19%)
55

66
import java.util.Arrays;
77

88
public class Solution {
99
public long maxSum(int[][] grid, int[] limits, int k) {
1010
int l = 0;
11-
for (int i = 0; i < limits.length; i++) {
12-
l += limits[i];
11+
for (int limit : limits) {
12+
l += limit;
1313
}
1414
int[] dp = new int[l];
1515
int a = 0;
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
3475\. DNA Pattern Recognition
2+
3+
Medium
4+
5+
Table: `Samples`
6+
7+
+----------------+---------+
8+
| Column Name | Type |
9+
+----------------+---------+
10+
| sample_id | int |
11+
| dna_sequence | varchar |
12+
| species | varchar |
13+
+----------------+---------+
14+
sample_id is the unique key for this table.
15+
Each row contains a DNA sequence represented as a string of characters (A, T, G, C) and the species it was collected from.
16+
17+
Biologists are studying basic patterns in DNA sequences. Write a solution to identify `sample_id` with the following patterns:
18+
19+
* Sequences that **start** with **ATG** (a common **start codon**)
20+
* Sequences that **end** with either **TAA**, **TAG**, or **TGA** (**stop codons**)
21+
* Sequences containing the motif **ATAT** (a simple repeated pattern)
22+
* Sequences that have **at least** `3` **consecutive** **G** (like **GGG** or **GGGG**)
23+
24+
Return _the result table ordered by __sample\_id in **ascending** order_.
25+
26+
The result format is in the following example.
27+
28+
**Example:**
29+
30+
**Input:**
31+
32+
Samples table:
33+
34+
+-----------+------------------+-----------+
35+
| sample_id | dna_sequence | species |
36+
+-----------+------------------+-----------+
37+
| 1 | ATGCTAGCTAGCTAA | Human |
38+
| 2 | GGGTCAATCATC | Human |
39+
| 3 | ATATATCGTAGCTA | Human |
40+
| 4 | ATGGGGTCATCATAA | Mouse |
41+
| 5 | TCAGTCAGTCAG | Mouse |
42+
| 6 | ATATCGCGCTAG | Zebrafish |
43+
| 7 | CGTATGCGTCGTA | Zebrafish |
44+
+-----------+------------------+-----------+
45+
46+
**Output:**
47+
48+
+-----------+------------------+-------------+-------------+------------+------------+------------+
49+
| sample_id | dna_sequence | species | has_start | has_stop | has_atat | has_ggg |
50+
+-----------+------------------+-------------+-------------+------------+------------+------------+
51+
| 1 | ATGCTAGCTAGCTAA | Human | 1 | 1 | 0 | 0 |
52+
| 2 | GGGTCAATCATC | Human | 0 | 0 | 0 | 1 |
53+
| 3 | ATATATCGTAGCTA | Human | 0 | 0 | 1 | 0 |
54+
| 4 | ATGGGGTCATCATAA | Mouse | 1 | 1 | 0 | 1 |
55+
| 5 | TCAGTCAGTCAG | Mouse | 0 | 0 | 0 | 0 |
56+
| 6 | ATATCGCGCTAG | Zebrafish | 0 | 1 | 1 | 0 |
57+
| 7 | CGTATGCGTCGTA | Zebrafish | 0 | 0 | 0 | 0 |
58+
+-----------+------------------+-------------+-------------+------------+------------+------------+
59+
60+
**Explanation:**
61+
62+
* Sample 1 (ATGCTAGCTAGCTAA):
63+
* Starts with ATG (has\_start = 1)
64+
* Ends with TAA (has\_stop = 1)
65+
* Does not contain ATAT (has\_atat = 0)
66+
* Does not contain at least 3 consecutive 'G's (has\_ggg = 0)
67+
* Sample 2 (GGGTCAATCATC):
68+
* Does not start with ATG (has\_start = 0)
69+
* Does not end with TAA, TAG, or TGA (has\_stop = 0)
70+
* Does not contain ATAT (has\_atat = 0)
71+
* Contains GGG (has\_ggg = 1)
72+
* Sample 3 (ATATATCGTAGCTA):
73+
* Does not start with ATG (has\_start = 0)
74+
* Does not end with TAA, TAG, or TGA (has\_stop = 0)
75+
* Contains ATAT (has\_atat = 1)
76+
* Does not contain at least 3 consecutive 'G's (has\_ggg = 0)
77+
* Sample 4 (ATGGGGTCATCATAA):
78+
* Starts with ATG (has\_start = 1)
79+
* Ends with TAA (has\_stop = 1)
80+
* Does not contain ATAT (has\_atat = 0)
81+
* Contains GGGG (has\_ggg = 1)
82+
* Sample 5 (TCAGTCAGTCAG):
83+
* Does not match any patterns (all fields = 0)
84+
* Sample 6 (ATATCGCGCTAG):
85+
* Does not start with ATG (has\_start = 0)
86+
* Ends with TAG (has\_stop = 1)
87+
* Starts with ATAT (has\_atat = 1)
88+
* Does not contain at least 3 consecutive 'G's (has\_ggg = 0)
89+
* Sample 7 (CGTATGCGTCGTA):
90+
* Does not start with ATG (has\_start = 0)
91+
* Does not end with TAA, "TAG", or "TGA" (has\_stop = 0)
92+
* Does not contain ATAT (has\_atat = 0)
93+
* Does not contain at least 3 consecutive 'G's (has\_ggg = 0)
94+
95+
**Note:**
96+
97+
* The result is ordered by sample\_id in ascending order
98+
* For each pattern, 1 indicates the pattern is present and 0 indicates it is not present
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Write your MySQL query statement below
2+
# #Medium #2025_03_04_Time_645_ms_(100.00%)_Space_0.0_MB_(100.00%)
3+
WITH SampleAnalysisCte AS (
4+
SELECT sample_id, dna_sequence, species,
5+
dna_sequence REGEXP '^ATG' AS has_start,
6+
dna_sequence REGEXP 'TAA$|TAG$|TGA$' AS has_stop,
7+
dna_sequence REGEXP '.*ATAT.*' AS has_atat,
8+
dna_sequence REGEXP '.*GGG.*' AS has_ggg
9+
FROM Samples
10+
)
11+
12+
SELECT * FROM SampleAnalysisCte
13+
ORDER BY sample_id;
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
package g3401_3500.s3475_dna_pattern_recognition;
2+
3+
import static org.hamcrest.CoreMatchers.equalTo;
4+
import static org.hamcrest.MatcherAssert.assertThat;
5+
6+
import java.io.BufferedReader;
7+
import java.io.FileNotFoundException;
8+
import java.io.FileReader;
9+
import java.sql.Connection;
10+
import java.sql.ResultSet;
11+
import java.sql.SQLException;
12+
import java.sql.Statement;
13+
import java.util.stream.Collectors;
14+
import javax.sql.DataSource;
15+
import org.junit.jupiter.api.Test;
16+
import org.zapodot.junit.db.annotations.EmbeddedDatabase;
17+
import org.zapodot.junit.db.annotations.EmbeddedDatabaseTest;
18+
import org.zapodot.junit.db.common.CompatibilityMode;
19+
20+
@EmbeddedDatabaseTest(
21+
compatibilityMode = CompatibilityMode.MySQL,
22+
initialSqls =
23+
" CREATE TABLE Samples ("
24+
+ " sample_id INT,"
25+
+ " dna_sequence VARCHAR(100),"
26+
+ " species VARCHAR(100)"
27+
+ ");"
28+
+ "insert into Samples (sample_id, dna_sequence, species) values "
29+
+ "(1, 'ATGCTAGCTAGCTAA', 'Human');"
30+
+ "insert into Samples (sample_id, dna_sequence, species) values "
31+
+ "(2, 'GGGTCAATCATC', 'Human');"
32+
+ "insert into Samples (sample_id, dna_sequence, species) values "
33+
+ "(3, 'ATATATCGTAGCTA', 'Human');"
34+
+ "insert into Samples (sample_id, dna_sequence, species) values "
35+
+ "(4, 'ATGGGGTCATCATAA', 'Human');"
36+
+ "insert into Samples (sample_id, dna_sequence, species) values "
37+
+ "(5, 'TCAGTCAGTCAG', 'Human');"
38+
+ "insert into Samples (sample_id, dna_sequence, species) values "
39+
+ "(6, 'ATATCGCGCTAG', 'Zebrafish');"
40+
+ "insert into Samples (sample_id, dna_sequence, species) values "
41+
+ "(7, 'CGTATGCGTCGTA', 'Zebrafish');")
42+
class MysqlTest {
43+
@Test
44+
void testScript(@EmbeddedDatabase DataSource dataSource)
45+
throws SQLException, FileNotFoundException {
46+
try (final Connection connection = dataSource.getConnection()) {
47+
try (final Statement statement = connection.createStatement();
48+
final ResultSet resultSet =
49+
statement.executeQuery(
50+
new BufferedReader(
51+
new FileReader(
52+
"src/main/java/g3401_3500/"
53+
+ "s3475_dna_pattern_recognition/"
54+
+ "script.sql"))
55+
.lines()
56+
.collect(Collectors.joining("\n"))
57+
.replaceAll("#.*?\\r?\\n", ""))) {
58+
assertThat(resultSet.next(), equalTo(true));
59+
assertThat(resultSet.getNString(1), equalTo("1"));
60+
assertThat(resultSet.getNString(2), equalTo("ATGCTAGCTAGCTAA"));
61+
assertThat(resultSet.getNString(3), equalTo("Human"));
62+
assertThat(resultSet.getNString(4), equalTo("TRUE"));
63+
assertThat(resultSet.getNString(5), equalTo("TRUE"));
64+
assertThat(resultSet.getNString(6), equalTo("FALSE"));
65+
assertThat(resultSet.getNString(7), equalTo("FALSE"));
66+
assertThat(resultSet.next(), equalTo(true));
67+
assertThat(resultSet.getNString(1), equalTo("2"));
68+
assertThat(resultSet.getNString(2), equalTo("GGGTCAATCATC"));
69+
assertThat(resultSet.getNString(3), equalTo("Human"));
70+
assertThat(resultSet.getNString(4), equalTo("FALSE"));
71+
assertThat(resultSet.getNString(5), equalTo("FALSE"));
72+
assertThat(resultSet.getNString(6), equalTo("FALSE"));
73+
assertThat(resultSet.getNString(7), equalTo("TRUE"));
74+
assertThat(resultSet.next(), equalTo(true));
75+
assertThat(resultSet.getNString(1), equalTo("3"));
76+
assertThat(resultSet.getNString(2), equalTo("ATATATCGTAGCTA"));
77+
assertThat(resultSet.getNString(3), equalTo("Human"));
78+
assertThat(resultSet.getNString(4), equalTo("FALSE"));
79+
assertThat(resultSet.getNString(5), equalTo("FALSE"));
80+
assertThat(resultSet.getNString(6), equalTo("TRUE"));
81+
assertThat(resultSet.getNString(7), equalTo("FALSE"));
82+
assertThat(resultSet.next(), equalTo(true));
83+
assertThat(resultSet.getNString(1), equalTo("4"));
84+
assertThat(resultSet.getNString(2), equalTo("ATGGGGTCATCATAA"));
85+
assertThat(resultSet.getNString(3), equalTo("Human"));
86+
assertThat(resultSet.getNString(4), equalTo("TRUE"));
87+
assertThat(resultSet.getNString(5), equalTo("TRUE"));
88+
assertThat(resultSet.getNString(6), equalTo("FALSE"));
89+
assertThat(resultSet.getNString(7), equalTo("TRUE"));
90+
assertThat(resultSet.next(), equalTo(true));
91+
assertThat(resultSet.getNString(1), equalTo("5"));
92+
assertThat(resultSet.getNString(2), equalTo("TCAGTCAGTCAG"));
93+
assertThat(resultSet.getNString(3), equalTo("Human"));
94+
assertThat(resultSet.getNString(4), equalTo("FALSE"));
95+
assertThat(resultSet.getNString(5), equalTo("FALSE"));
96+
assertThat(resultSet.getNString(6), equalTo("FALSE"));
97+
assertThat(resultSet.getNString(7), equalTo("FALSE"));
98+
assertThat(resultSet.next(), equalTo(true));
99+
assertThat(resultSet.getNString(1), equalTo("6"));
100+
assertThat(resultSet.getNString(2), equalTo("ATATCGCGCTAG"));
101+
assertThat(resultSet.getNString(3), equalTo("Zebrafish"));
102+
assertThat(resultSet.getNString(4), equalTo("FALSE"));
103+
assertThat(resultSet.getNString(5), equalTo("TRUE"));
104+
assertThat(resultSet.getNString(6), equalTo("TRUE"));
105+
assertThat(resultSet.getNString(7), equalTo("FALSE"));
106+
assertThat(resultSet.next(), equalTo(true));
107+
assertThat(resultSet.getNString(1), equalTo("7"));
108+
assertThat(resultSet.getNString(2), equalTo("CGTATGCGTCGTA"));
109+
assertThat(resultSet.getNString(3), equalTo("Zebrafish"));
110+
assertThat(resultSet.getNString(4), equalTo("FALSE"));
111+
assertThat(resultSet.getNString(5), equalTo("FALSE"));
112+
assertThat(resultSet.getNString(6), equalTo("FALSE"));
113+
assertThat(resultSet.getNString(7), equalTo("FALSE"));
114+
assertThat(resultSet.next(), equalTo(false));
115+
}
116+
}
117+
}
118+
}

0 commit comments

Comments
 (0)