maximum-count-of-positive-integer-and-negative-integer 1.0.0
Maximum Count of Positive Integer and Negative Integer
Loading...
Searching...
No Matches
Solution Class Reference

Public Member Functions

int maximumCount (vector< int > &nums)
 

Detailed Description

Definition at line 5 of file main.cpp.

Member Function Documentation

◆ maximumCount()

int Solution::maximumCount ( vector< int > &  nums)
inline

Definition at line 8 of file main.cpp.

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 }

Referenced by main().


The documentation for this class was generated from the following file: