Algorithm I: Day 2
Diffstat:
2 files changed, 27 insertions(+), 2 deletions(-)
@@ -1,12 +1,22 @@
// O(n) memory solution
class Solution {
public:
void rotate(vector<int> &nums, int k) {
k %= nums.size();
vector<int> t(k);
for (int i = 0; i < k; i++) t[i] = nums[nums.size() - k + i];
for (int i = nums.size() - k - 1; i >= 0; i--) nums[i + k] = nums[i];
for (int i = 0; i < k; i++) nums[i] = t[i];
}
};
// O(1) memory solution
class Solution {
public:
void rotate(vector<int> &nums, int k) {
k %= nums.size();
reverse(nums.begin(), nums.end());
reverse(nums.begin(), nums.begin() + k);
reverse(nums.begin() + k, nums.end());
}
};
@@ -1,3 +1,4 @@
// Intuitive solution
class Solution {
public:
vector<int> sortedSquares(vector<int> &nums) {
@@ -18,3 +19,17 @@
public:
return res;
}
};
// Intuitive solution, better execution
// avoids recomputation of squares
// avoids reversal of the array
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size(), i=0, j =nums.size()-1;
vector<int> res(n);
for_each(nums.begin(), nums.end(), [](int &a) { a*=a; });
while(i<=j) res[--n] = nums[i]>nums[j] ? nums[i++] : nums[j--];
return res;
}
};