-
Notifications
You must be signed in to change notification settings - Fork 181
Open
Description
#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;
}
};
Metadata
Metadata
Assignees
Labels
No labels