chore(CPlusPlus): add smallest-possible-sum (#555)
parent
5b2cb282c7
commit
c152e76522
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
Description
|
||||||
|
Given an array X of positive integers, its elements are to be transformed by running the following operation on them as many times as required:
|
||||||
|
|
||||||
|
if X[i] > X[j] then X[i] = X[i] - X[j]
|
||||||
|
|
||||||
|
When no more transformations are possible, return its sum ("smallest possible sum").
|
||||||
|
|
||||||
|
For instance, the successive transformation of the elements of input X = [6, 9, 21] is detailed below:
|
||||||
|
|
||||||
|
X_1 = [6, 9, 12] # -> X_1[2] = X[2] - X[1] = 21 - 9
|
||||||
|
X_2 = [6, 9, 6] # -> X_2[2] = X_1[2] - X_1[0] = 12 - 6
|
||||||
|
X_3 = [6, 3, 6] # -> X_3[1] = X_2[1] - X_2[0] = 9 - 6
|
||||||
|
X_4 = [6, 3, 3] # -> X_4[2] = X_3[2] - X_3[1] = 6 - 3
|
||||||
|
X_5 = [3, 3, 3] # -> X_5[1] = X_4[0] - X_4[1] = 6 - 3
|
||||||
|
The returning output is the sum of the final transformation (here 9).
|
||||||
|
|
||||||
|
Example
|
||||||
|
solution([6, 9, 21]) #-> 9
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
~~~~~~~ NOTE ~~~~~~~~~
|
||||||
|
There are performance tests consisted of very big numbers and arrays of size at least 30000. Please write an efficient algorithm to prevent timeout.
|
||||||
|
Your IDE may not show timeout, but timeout can occur in standard coding competetions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
#include <numeric>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
unsigned long long solution(const vector<unsigned long long>& arr){
|
||||||
|
unsigned long long prev_gcd = arr[0];
|
||||||
|
for (auto i : arr){
|
||||||
|
prev_gcd = gcd(i, prev_gcd); // finding gcd of the array.
|
||||||
|
}
|
||||||
|
return arr.size()*prev_gcd;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
const vector<unsigned long long> vec = {9, 6, 12};
|
||||||
|
cout << solution(vec);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Testcases :
|
||||||
|
solution({1,21,55}) // --> 3
|
||||||
|
solution({3,13,23,7,83}) // --> 5
|
||||||
|
solution({4,16,24}) // --> 12
|
||||||
|
solution({30,12}) // --> 12
|
||||||
|
solution({60,12,96,48,60,24,72,36,72,72,48}) // --> 132
|
||||||
|
solution({71,71,71,71,71,71,71,71,71,71,71,71,71}) // --> 923
|
||||||
|
solution({11,22}) // --> 22
|
||||||
|
solution({9}) // --> 9
|
||||||
|
solution({1}) // --> 1
|
||||||
|
solution({9, 9}) // --> 18
|
||||||
|
*/
|
|
@ -20,10 +20,12 @@
|
||||||
- [Segregate 0s and 1s](Arrays/segregate-0-and-1.cpp)
|
- [Segregate 0s and 1s](Arrays/segregate-0-and-1.cpp)
|
||||||
- [Search insert position](Arrays/search-insert-position.cpp)
|
- [Search insert position](Arrays/search-insert-position.cpp)
|
||||||
- [Matrix Multiplication](Arrays/matrix-multiplication.cpp)
|
- [Matrix Multiplication](Arrays/matrix-multiplication.cpp)
|
||||||
|
- [Smallest Sum Possible](Arrays/smallest-sum-possible.cpp)
|
||||||
- [Smallest Possible Sum](Arrays/smallest-possible-sum.cpp)
|
- [Smallest Possible Sum](Arrays/smallest-possible-sum.cpp)
|
||||||
- [Move Zeros to End of The Array](Arrays/move-zeros-to-end-of-array.cpp)
|
- [Move Zeros to End of The Array](Arrays/move-zeros-to-end-of-array.cpp)
|
||||||
- [Kadane's Algorithm](Arrays/Kadane's-Algorithm.cpp)
|
- [Kadane's Algorithm](Arrays/Kadane's-Algorithm.cpp)
|
||||||
|
|
||||||
|
|
||||||
## Dynamic-Programming
|
## Dynamic-Programming
|
||||||
|
|
||||||
- [Longest Common Subsequence](Dynamic-Programming/longest-common-subsequence.cpp)
|
- [Longest Common Subsequence](Dynamic-Programming/longest-common-subsequence.cpp)
|
||||||
|
|
Loading…
Reference in New Issue