评价:就笔者的感觉吧,leetcode上难度标为“中等”的题目往往不是说需要什么高深的算法来解决,但基本都涉及到 “问题转化” 的能力要求,换言之,难点往往在于思维。
tip:要解决这类问题,笔者推荐多看看测试数据,观察他们的规律,多少能觅得一些启发。
就今天这题而言,题目叙述只是提供了一个要求,并不是要你真的分成两个数组。
先说结论,其实要求出分度值的最小值,就是先对nums从小到大排序后,相邻两元素差的最小值
下面简单解释一下思路:
0. 首先很明确,任取nums中两个值作差的最小值minimu,一定小于等于根据题目需要(拆成两个数组...作差)返回的的值,
1. 那么就是看这个值minimu能否取到,
2. 进一步就是看,作差求出minimum的那两个数能否按题目要求放进两个数组的相应位置
3. 记排序后,作差求minimum的两个数为a, b
如下图所示,必然可以满足题目分成两数组要求
你明白了吗~?
下面附上AC代码:
class Solution {
public:
int findValueOfPartition(vector<int>& nums) {
sort(nums.begin(), nums.end());
int minimum = nums[1] - nums[0];
for(int i=2; i<nums.size(); i++)
{
minimum = min(minimum, nums[i]-nums[i-1]);
}
return minimum;
}
};
~希望对你有启发~