
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Longest Interval Containing One Number in C++
Suppose we have a list of distinct integers called nums. We have to find the size of the largest interval (inclusive) [start, end] such that it contains at most one number in nums.
So, if the input is like nums = [10, 6, 20], then the output will be 99990, as the largest interval is [11, 100000], this contains 20 only.
To solve this, we will follow these steps −
ret := -inf
end := 100000
prev := 1
sort the array nums
n := size of nums
-
for initialize i := 0, when i < size of nums, update (increase i by 1), do −
-
if i + 1 < n, then −
high := nums[i + 1] - 1
-
Otherwise
high := end
-
if i - 1 >= 0, then −
low := prev + 1
-
Otherwise
low := prev
prev := nums[i]
ret := maximum of high - low + 1 and ret
-
return ret
Let us see the following implementation to get better understanding −
Example
#include <bits/stdc++.h> using namespace std; class Solution { public: int solve(vector<int> &nums) { int ret = INT_MIN; int end = 100000; int prev = 1; sort(nums.begin(), nums.end()); int n = nums.size(); int low, high; for (int i = 0; i < nums.size(); i++) { if (i + 1 < n) { high = nums[i + 1] - 1; } else high = end; if (i - 1 >= 0) { low = prev + 1; } else low = prev; prev = nums[i]; ret = max(high - low + 1, ret); } return ret; } }; main() { Solution ob; vector<int> v = {10, 6, 20}; cout << (ob.solve(v)); }
Input
{10, 6, 20}
Output
99990