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
3
using namespace
std;
4
5
class
Solution
6
{
7
public
:
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
54
int
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
}
Solution
Definition
main.cpp:6
Solution::maximumCount
int maximumCount(vector< int > &nums)
Definition
main.cpp:8
main
int main()
Definition
main.cpp:54
main.cpp
Generated by
1.9.8