You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#include <vector>
#include <cmath>
#include <algorithm>
class Solution {
public:
int findClosestNumber(const std::vector<int>& nums) {
int closest = nums[0];
for (int x : nums) {
if (std::abs(x) < std::abs(closest)) {
closest = x;
}
}
if (closest < 0 && std::find(nums.begin(), nums.end(), std::abs(closest)) != nums.end()) {
return std::abs(closest);
} else {
return closest;
}
}
};
The solution which you have provided has a time complexity of O(2n) in the worst case.
Instead of using the std::find function call we can simply keep track whether the minimum value we are getting is coming from negative value and positive value and update answer accordingly.
My code is provided here. Please verify it:
class Solution
{
public:
int findClosestNumber(vector<int> &nums)
{
int n = nums.size();
int ans = INT_MAX;
bool val = false;
for (int i = 0; i < n; i++)
{
if (nums[i] > 0)
{
if (nums[i] <= ans)
{
ans = nums[i];
val = true;
}
}
else
{
int num = -nums[i];
if (num < ans)
{
ans = num;
val = false;
}
}
}
if (val == false) return -ans;
else return ans;
}
};
The text was updated successfully, but these errors were encountered:
The solution which you have provided has a time complexity of O(2n) in the worst case.
Instead of using the std::find function call we can simply keep track whether the minimum value we are getting is coming from negative value and positive value and update answer accordingly.
My code is provided here. Please verify it:
The text was updated successfully, but these errors were encountered: