maximum-count-of-positive-integer-and-negative-integer 1.0.0
Maximum Count of Positive Integer and Negative Integer
Loading...
Searching...
No Matches
main.cpp
Go to the documentation of this file.
1#include <bits/stdc++.h>
2
3using namespace std;
4
6{
7public:
8 int maximumCount(vector<int>& nums)
9 {
10 int size = (int)nums.size();
11
12 // exclude all positives or all negatives
13 if (nums[0] > 0 || (nums[0] < 0 && nums[size - 1] < 0))
14 return size;
15 else if (nums[0] == 0 && nums[size - 1] == 0)
16 return 0;
17
18 // we need to return maximum of (positives, negatives), but zeroes do not count to either, so we need to find both of last_negative and first_positive
19
20 int left = 0;
21 int right = size - 1;
22 int mid_n; // last_negative
23 while (left <= right)
24 {
25 mid_n = left + (right - left) / 2;
26 if ((nums[mid_n] < 0 && mid_n + 1 >= size) || (nums[mid_n] < 0 && mid_n + 1 < size && nums[mid_n + 1] >= 0))
27 break;
28 if (nums[mid_n] >= 0)
29 right = mid_n - 1; // go left
30 else
31 left = mid_n + 1; // go right
32 }
33 // cout << "First negative at index: " << mid_n << '\n';
34
35 left = 0;
36 right = size - 1;
37 int mid_p; // first_positive
38 while (left <= right)
39 {
40 mid_p = left + (right - left) / 2;
41 if ((nums[mid_p] > 0 && mid_p - 1 < 0) || (nums[mid_p] > 0 && mid_p - 1 >= 0 && nums[mid_p - 1] <= 0))
42 break;
43 if (nums[mid_p] <= 0)
44 left = mid_p + 1; // go right
45 else
46 right = mid_p - 1; // go left
47 }
48 // cout << "First positive at index: " << mid_p << '\n';
49
50 return max(mid_n + 1, size - mid_p);
51 }
52};
53
54int main()
55{
56 vector<int> nums = {-4, -3, -2, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4}; // 13 elements, 6 zeroes, 3 negatives, 4 positives
57 cout << Solution().maximumCount(nums) << '\n'; // return 4
58 return 0;
59}
int maximumCount(vector< int > &nums)
Definition main.cpp:8
int main()
Definition main.cpp:54