Skip to content

Commit c8f72d8

Browse files
3128. Right Triangles
1 parent 3b54b55 commit c8f72d8

File tree

10 files changed

+96
-0
lines changed

10 files changed

+96
-0
lines changed
1.45 KB
Loading
879 Bytes
Loading
1.4 KB
Loading
22.4 KB
Loading
22.4 KB
Loading
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
class Solution
2+
{
3+
public:
4+
long long numberOfRightTriangles(vector<vector<int>> &grid)
5+
{
6+
// Initialisation des vecteurs pour compter le nombre de 1 dans chaque ligne et chaque colonne
7+
vector<int> rows(grid.size(), 0); // Vecteur pour compter les 1 dans chaque ligne
8+
vector<int> cols(grid[0].size(), 0); // Vecteur pour compter les 1 dans chaque colonne
9+
10+
// Parcours de la grille pour compter les 1 dans chaque ligne et chaque colonne
11+
for (int i = 0; i < grid.size(); i++)
12+
{
13+
for (int j = 0; j < grid[0].size(); j++)
14+
{
15+
if (grid[i][j])
16+
{
17+
cols[j]++; // Incrémente le compteur de 1 dans la colonne j
18+
rows[i]++; // Incrémente le compteur de 1 dans la ligne i
19+
}
20+
}
21+
}
22+
23+
long long ans = 0; // Initialisation de la réponse
24+
25+
// Parcours de la grille pour compter les triangles rectangles possibles
26+
for (int i = 0; i < grid.size(); i++)
27+
{
28+
for (int j = 0; j < grid[0].size(); j++)
29+
{
30+
if (grid[i][j])
31+
{
32+
int _rows = rows[i] - 1; // Nombre de 1 dans la ligne i sans compter le point actuel
33+
int _cols = cols[j] - 1; // Nombre de 1 dans la colonne j sans compter le point actuel
34+
35+
// Ajoute le nombre de triangles possibles avec le point (i, j) comme angle droit
36+
ans += _rows * _cols;
37+
}
38+
}
39+
}
40+
return ans;
41+
}
42+
};
+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 3128. Right Triangles
2+
3+
## Énoncé
4+
5+
Vous avez une matrice booléenne 2D nommée `grid`.
6+
7+
Renvoyez un entier qui représente le nombre de **triangles rectangles** qui peuvent être formés avec 3 éléments de `grid` tels que **tous** ces éléments ont une valeur de 1.
8+
9+
Un ensemble de 3 éléments dans `grid` forme un **triangle rectangle** si l'un de ses éléments est dans la **même ligne** et qu'un autre élément et dans la **même colonne** que le troisième élément. Les 3 éléments ne doivent pas nécessairement être adjacents.
10+
11+
## Exemple
12+
13+
**Exemple 1:**
14+
15+
<img src="./imgs/img1.png"/>
16+
17+
**Input:** grid = [[0,1,0],[0,1,1],[0,1,0]]
18+
**Output:** 2
19+
20+
**Exemple 2:**
21+
22+
<img src="./imgs/img2.png"/>
23+
24+
**Input:** grid = [[1,0,0,0],[0,1,0,1],[1,0,0,0]]
25+
**Output:** 0
26+
27+
**Exemple 3:**
28+
29+
<img src="./imgs/img3.png"/>
30+
31+
**Input:** grid = [[1,0,1],[1,0,0],[1,0,0]]
32+
**Output:** 2
33+
34+
## Contraintes
35+
36+
`1 <= grid.length <= 1000`
37+
`1 <= grid[i].length <= 1000`
38+
`0 <= grid[i][j] <= 1`
39+
40+
## Note personnelle
41+
42+
Pour résoudre ce problème, ma solution nécessite de parcourir la grille deux fois.
43+
44+
Lors du premier passage, je conserve pour chaque ligne/colonne le nombre de 1 qu'elle contient. Ces valeurs sont stockées dans deux vecteurs `rows` et `cols`.
45+
46+
Lors du second passage, je calcule le nombre de triangles rectangles. En supposant que chaque rencontre d'un `1`peut potentiellement former l'angle droit d'un triangle rectangle, le nombre de triangles de cette case est `(rows[i] - 1) * (cols[j] - 1)`.
47+
48+
Cette approche présente une complexité temporelle de `O(n * m)` et une complexité spatiale de `O(n + m)`.
49+
50+
<img src="./imgs/runtime.png"/>
51+
<img src="./imgs/memory.png"/>

skills/array.md

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ Illustration d'un tableau a une dimension:
8686
| [1679. Max Number of K-Sum Pairs](../Probleme/1679.%20Max%20Number%20of%20K-Sum%20Pairs/) | [`Array`](./array.md), [`Two Pointers`](./two_pointers.md), [`Sorting`](./sorting.md), [`Hash Table`](./hash_table.md) | 13-03-2024 |
8787
| [3066. Minimum Operations to Exceed Threshold Value II](../Probleme/3066.%20Minimum%20Operations%20to%20Exceed%20Threshold%20Value%20II/) | [`Array`](./array.md), [`Heap (Priority Queue)`](./priority_queue.md), [`Simulation`](./simulation.md) | 02-03-2024 |
8888
| [3080. Mark Elements on Array by Performing Queries](../Probleme/3080.%20Mark%20Elements%20on%20Array%20by%20Performing%20Queries/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Sorting`](./sorting.md), [`Heap (Priority Queue)`](./priority_queue.md), [`Simulation`](./simulation.md) | 16-03-2024 |
89+
| [3128. Right Triangles](../Probleme/3128.%20Right%20Triangles/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Math`](./math.md), `Combinatorics`, `Counting` | 10-05-2024 |
8990

9091
### Difficile
9192

skills/hash_table.md

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Un annuaire représenté comme une table de hachage. La fonction de hachage tran
4747
| [1679. Max Number of K-Sum Pairs](../Probleme/1679.%20Max%20Number%20of%20K-Sum%20Pairs/) | [`Array`](./array.md), [`Two Pointers`](./two_pointers.md), [`Sorting`](./sorting.md), [`Hash Table`](./hash_table.md) | 13-03-2024 |
4848
| [3080. Mark Elements on Array by Performing Queries](../Probleme/3080.%20Mark%20Elements%20on%20Array%20by%20Performing%20Queries/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Sorting`](./sorting.md), [`Heap (Priority Queue)`](./priority_queue.md), [`Simulation`](./simulation.md) | 16-03-2024 |
4949
| [3081. Replace Question Marks in String to Minimize Its Value](../Probleme/3081.%20Replace%20Question%20Marks%20in%20String%20to%20Minimize%20Its%20Value/) | [`Hash Table`](./hash_table.md), [`String`](./string.md), [`Greedy`](./greedy.md), [`Sorting`](./sorting.md), [`Heap (Priority Queue)`](./priority_queue.md), [`Counting`](./counting.md) | 22-03-2024 |
50+
| [3128. Right Triangles](../Probleme/3128.%20Right%20Triangles/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Math`](./math.md), `Combinatorics`, `Counting` | 10-05-2024 |
5051

5152
### Difficile
5253

skills/math.md

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
| [50. Pow(x, n)](<../Probleme/0050.%20Pow(x,%20n)/>) | [`Math`](./math.md), [`Recursion`](./recursion.md) | 29-03-2024 |
3131
| [62. Unique Paths](../Probleme/0062.%20Unique%20Paths/) | [`Math`](./math.md), [`Dynamic Programming`](./dp.md), `Combinatorics` | 21-03-2024 |
3232
| [380. Insert Delete GetRandom O(1)](<../Probleme/0380.%20Insert%20Delete%20GetRandom%20O(1)/>) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Math`](./math.md), [`Design`](./design.md), `Randomized` | 06-04-2024 |
33+
| [3128. Right Triangles](../Probleme/3128.%20Right%20Triangles/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Math`](./math.md), `Combinatorics`, `Counting` | 10-05-2024 |
3334

3435
### Difficile
3536

0 commit comments

Comments
 (0)