Skip to content

Commit 5b26503

Browse files
2574. Left and Right Sum Differences
1 parent d1e62bb commit 5b26503

File tree

6 files changed

+139
-0
lines changed

6 files changed

+139
-0
lines changed
Loading
Loading
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution
2+
{
3+
public:
4+
vector<int> leftRightDifference(vector<int> &nums)
5+
{
6+
int leftSum = 0; // Somme des éléments à gauche de l'élément actuel
7+
int rightSum = 0; // Somme des éléments à droite de l'élément actuel
8+
9+
// Calcul de la somme totale des éléments du vecteur
10+
for (int n : nums)
11+
{
12+
rightSum += n;
13+
}
14+
15+
// Itération pour calculer les différences
16+
for (int i = 0; i < nums.size(); i++)
17+
{
18+
int temp = nums[i]; // Stocke l'élément actuel
19+
20+
// Met à jour rightSum en retirant l'élément actuel
21+
rightSum -= temp;
22+
23+
// Calcul de la différence absolue
24+
nums[i] = abs(leftSum - rightSum);
25+
26+
// Met à jour leftSum en ajoutant l'élément actuel
27+
leftSum += temp;
28+
}
29+
30+
return nums; // Retourne le vecteur avec les différences absolues
31+
}
32+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# 2574. Left and Right Sum Differences
2+
3+
## Énoncé
4+
5+
Étant donné un tableau d'entiers **indexé à 0** `nums`, trouvez un tableau d'entiers **indexé à 0** `answer` où:
6+
7+
- `answer.length == nums.length`.
8+
- `answer[i] = |leftSum[i] - rightSum[i]|`.
9+
10+
- `leftSum[i]` est la somme des éléments à gauche de l'indice `i` dans le tableau `nums`. S'il n'y a pas un tel élément, `leftSum[i] = 0`.
11+
- `rightSum[i]` est la somme des éléments à droite de l'indice `i` dans le tableau `nums`. S'il n'y a pas un tel élément, `rightSum[i] = 0`.
12+
13+
Retournez le tableau `answer`.
14+
15+
## Exemple
16+
17+
**Exemple 1:**
18+
**Input:** nums = [10,4,8,3]
19+
**Output:** [15,1,11,22]
20+
**Explication:** Le tableau leftSum est [0,10,14,22] et le tableau rightSum est [15,11,3,0].
21+
Le tableau answer est [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22].
22+
23+
**Exemple 2:**
24+
**Input:** nums = [1]
25+
**Output:** [0]
26+
**Explication:** Le tableau leftSum est [0] et le tableau rightSum est [0].
27+
Le tableau answer est [|0 - 0|] = [0].
28+
29+
## Contraintes
30+
31+
`1 <= nums.length <= 1000`
32+
`1 <= nums[i] <= 10^5`
33+
34+
## Note personnelle
35+
36+
### Approche 1
37+
38+
Dans cette approche, nous créons les tableaux `leftSum` et `rightSum` comme décrit dans l'énoncé.
39+
40+
```cpp
41+
vector<int> leftRightDifference(vector<int>& nums) {
42+
int n = nums.size();
43+
44+
// Vecteurs pour stocker les sommes cumulatives de gauche et de droite
45+
vector<int> leftSum(n, 0);
46+
vector<int> rightSum(n, 0);
47+
48+
// Calcul des sommes cumulatives à gauche et à droite
49+
for(int i = 1; i < n; i++){
50+
leftSum[i] = leftSum[i - 1] + nums[i - 1];
51+
rightSum[n - i - 1] = rightSum[n - i] + nums[n - i];
52+
}
53+
54+
// Vecteur pour stocker les résultats finaux
55+
vector<int> ans(n);
56+
57+
// Calcul de la différence absolue entre les sommes à gauche et à droite
58+
for(int i = 0; i < n; i++){
59+
ans[i] = abs(leftSum[i] - rightSum[i]);
60+
}
61+
62+
return ans;
63+
}
64+
```
65+
66+
- Complexité Temporelle `O(n)`
67+
- Complexité Spatiale `O(n)`
68+
69+
## Approche 2
70+
71+
Cette approche optimise la précédente en remplaçant les tableaux par des variables entières. Les sommes à gauche et à droite sont calculées directement pendant la création du vecteur de résultats.
72+
73+
```cpp
74+
vector<int> leftRightDifference(vector<int>& nums) {
75+
int leftSum = 0; // Somme des éléments à gauche de l'élément actuel
76+
int rightSum = 0; // Somme des éléments à droite de l'élément actuel
77+
78+
// Calcul de la somme totale des éléments du vecteur
79+
for(int n : nums){
80+
rightSum += n;
81+
}
82+
83+
// Itération pour calculer les différences
84+
for(int i = 0; i < nums.size(); i++){
85+
int temp = nums[i]; // Stocke l'élément actuel
86+
87+
// Met à jour rightSum en retirant l'élément actuel
88+
rightSum -= temp;
89+
90+
// Calcul de la différence absolue
91+
nums[i] = abs(leftSum - rightSum);
92+
93+
// Met à jour leftSum en ajoutant l'élément actuel
94+
leftSum += temp;
95+
}
96+
97+
return nums; // Retourne le vecteur avec les différences absolues
98+
}
99+
```
100+
101+
- Complexité Temporelle `O(n)`
102+
- Complexité Spatiale `O(1)`
103+
104+
<img src="./imgs/runtime.png"/>
105+
<img src="./imgs/memory.png"/>

skills/array.md

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ Illustration d'un tableau a une dimension:
5454
| [1991. Find the Middle Index in Array](../Probleme/1991.%20Find%20the%20Middle%20Index%20in%20Array/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md) | 26-02-2024 |
5555
| [2215. Find the Difference of Two Arrays](../Probleme/2215.%20Find%20the%20Difference%20of%20Two%20Arrays/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md) | 14-03-2024 |
5656
| [2540. Minimum Common Value](../Probleme/2540.%20Minimum%20Common%20Value/) | [`Array`](./array.md), [`Hash Table`](./hash_table.md), [`Two Pointers`](./two_pointers.md), [`Binary Search`](./binary_search.md) | 09-03-2024 |
57+
| [2574. Left and Right Sum Differences](../Probleme/2574.%20Left%20and%20Right%20Sum%20Differences/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md) | 21-05-2024 |
5758
| [2798. Number of Employees Who Met the Target](../Probleme/2798.%20Number%20of%20Employees%20Who%20Met%20the%20Target/) | [`Array`](./array.md) | 02-07-2024 |
5859
| [2824. Count Pairs Whose Sum is Less than Target](../Probleme/2824.%20Count%20Pairs%20Whose%20Sum%20is%20Less%20than%20Target/) | [`Array`](./array.md), [`Two Pointers`](./two_pointers.md), [`Binary Search`](./binary_search.md), [`Sorting`](./sorting.md) | 30-06-2024 |
5960
| [2859. Sum of Values at Indices With K Set Bits](../Probleme/2859.%20Sum%20of%20Values%20at%20Indices%20With%20K%20Set%20Bits/) | [`Array`](./array.md), [`Bit Manipulation`](./bit_manipulation.md) | 30-06-2024 |

skills/prefix_sum.md

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Le principe de **Prefix Sum** consiste à calculer la somme cumulative des élé
2121
| [1893. Check if All the Integers in a Range Are Covered](../Probleme/1893.%20Check%20if%20All%20the%20Integers%20in%20a%20Range%20Are%20Covered/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md), [`Hash Table`](./hash_table.md) | 26-02-2024 |
2222
| [1991. Find the Middle Index in Array](../Probleme/1991.%20Find%20the%20Middle%20Index%20in%20Array/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md) | 26-02-2024 |
2323
| [2485. Find the Pivot Integer](../Probleme/2485.%20Find%20the%20Pivot%20Integer/) | [`Prefix Sum`](./prefix_sum.md), [`Math`](./math.md) | 13-03-2024 |
24+
| [2574. Left and Right Sum Differences](../Probleme/2574.%20Left%20and%20Right%20Sum%20Differences/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md) | 21-05-2024 |
2425
| [3028. Ant on the Boundary](../Probleme/3028.%20Ant%20on%20the%20Boundary/) | [`Array`](./array.md), [`Prefix Sum`](./prefix_sum.md), [`Simulation`](./simulation.md) | 26-02-2024 |
2526

2627
### Moyen

0 commit comments

Comments
 (0)