C++ Coding Exercise: Smallest Range of Array

  • 时间:2020-10-06 11:32:45
  • 分类:网络文摘
  • 阅读:104 次

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) —

推荐阅读:
How to Remove Zero Sum Consecutive Nodes from Linked List using   Depth First Search and Breadth First Search Algorithm to Open th  Dynamic Programming (Memoization) to Sort Integers by The Power   Applicable Accounting Software For Churches  How to Balance a Binary Search Tree using Recursive Inorder Trav  Finding the Lucky Numbers in a Matrix  Factory Design Pattern in Object Oriented Design Programming  Algorithm to Find Minimum Removals to Make Valid Parentheses  Greedy Algorithm to Validate Stack Sequences  Why is Web Hosting Important for Bloggers? 
评论列表
添加评论