牛牛面前有一堆数,他想把这些数分成两堆,只不过牛牛是一个很有想法的人。
他希望分得的两堆数能够满足,第一堆数的最大值和第二堆数的最小值差值最小。
由于数太多,牛牛犯了难,所以他想请你帮帮他,给定n个数,返回符合牛牛希望的分法中最小的差值是多少。
2,[1,2]
1
只有一种分发,分成的两堆数中第一堆数的最大值与第二堆数的最小值差值最小为1。
6,[2,4,3,3,1,2]
0
在所有分法中,第一堆数分成[2,1],第二堆数分成[3,2,4,3],分成的两堆数中第一堆数的最大值与第二堆数的最小值差值最小为0。
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回符合牛牛希望的分法中最小的差值是多少 * @param n int整型 代表共有多少数 * @param a int整型vector 代表每个数的大小 * @return int整型 */ int splitArray(int n, vector<int>& a) { // write code here sort(a.begin(),a.end()); vector<int> diff; for(int i=0;i<a.size();i++) if(i<a.size()-1) diff.push_back(a[i+1]-a[i]); return *std::min_element(diff.begin(),diff.end()); }
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回符合牛牛希望的分法中最小的差值是多少 * @param n int整型 代表共有多少数 * @param a int整型vector 代表每个数的大小 * @return int整型 */ int splitArray(int n, vector<int>& a) { // write code here sort(a.begin(), a.end()); int res = a[1] - a[0]; for(int i = 2; i < n; i++){ res = min(res, a[i] - a[i - 1]); } return res; } };