C++ Coding Exercise: Smallest Range of Array
- 时间:2020-10-06 11:32:45
- 分类:网络文摘
- 阅读:119 次
Given an array A of integers, for each integer A[i] we may choose any x with -K <= x <= K, and add x to A[i]. After this process, we have some array B.
Return the smallest possible difference between the maximum value of B and the minimum value of B.
Example 1:
Input: A = [1], K = 0
Output: 0
Explanation: B = [1]Example 2:
Input: A = [0,10], K = 2
Output: 6
Explanation: B = [2,8]Example 3:
Input: A = [1,3,6], K = 3
Output: 0
Explanation: B = [3,3,3] or B = [4,4,4]Note:
1 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
We need to find out the max and min number of the array first using O(N) approach – e.g. using std::accumulate method to do this in one line.
Then, the smallest range must be the difference between the max-k, and min+k, if the min+k is bigger than max-k, the difference of the smallest range is zero because we can always choose a number that is smaller than K to make the difference zero (greedy algorithm).
1 2 3 4 5 6 7 8 | class Solution { public: int smallestRangeI(vector<int> & A, int K) { int _max = std::accumulate(begin(A), end(A), A[0], [](auto &a, auto &b) { return max(a, b); }); int _min = std::accumulate(begin(A), end(A), A[0], [](auto &a, auto &b) { return min(a, b); }); return max(0, _max - K - (_min + K)); } }; |
class Solution {
public:
int smallestRangeI(vector<int> & A, int K) {
int _max = std::accumulate(begin(A), end(A), A[0], [](auto &a, auto &b) { return max(a, b); });
int _min = std::accumulate(begin(A), end(A), A[0], [](auto &a, auto &b) { return min(a, b); });
return max(0, _max - K - (_min + K));
}
};The above C++ approach takes O(N) time, and O(1) space.
–EOF (The Ultimate Computing & Technology Blog) —
推荐阅读:Depth First Search Algorithm to Compute the Smallest String Star Algorithm to Check if All Points are On the Same Line Prefix Sum Algorithm to Count Number of Nice Subarrays How to Append Another List to a Existing List in Python? (Differ Linear Algorithm to Check If All 1’s Are at Least Length K Finding the Root of a Tree (Finding the Common Destination) Does WIFI Extender Boost Wireless Signal? How to Fix Slow WIFI? Bruteforce with Memoization to Count the Square Digit Chains How to Merge Two List/Iterators in Java? How to Design a First Unique Number Class with O(1)?
- 评论列表
-
- 添加评论