本人算法萌新,为秋招找工作开始磨炼算法,如果我有哪些地方做的有问题的,还请大家不吝赐教.
1.题干
给你一个正整数数组
nums
。将
nums
分成两个数组:nums1
和nums2
,并满足下述条件:
- 数组
nums
中的每个元素都属于数组nums1
或数组nums2
。- 两个数组都 非空 。
- 分区值 最小 。
分区值的计算方法是
|max(nums1) - min(nums2)|
。其中,
max(nums1)
表示数组nums1
中的最大元素,min(nums2)
表示数组nums2
中的最小元素。返回表示分区值的整数。
示例 1:
输入:nums = [1,3,2,4] 输出:1 解释:可以将数组 nums 分成 nums1 = [1,2] 和 nums2 = [3,4] 。 - 数组 nums1 的最大值等于 2 。 - 数组 nums2 的最小值等于 3 。 分区值等于 |2 - 3| = 1 。 可以证明 1 是所有分区方案的最小值。示例 2:
输入:nums = [100,1,10] 输出:9 解释:可以将数组 nums 分成 nums1 = [10] 和 nums2 = [100,1] 。 - 数组 nums1 的最大值等于 10 。 - 数组 nums2 的最小值等于 1 。 分区值等于 |10 - 1| = 9 。 可以证明 9 是所有分区方案的最小值。提示:
2 <= nums.length <= 105
1 <= nums[i] <= 109
2.思考
本题要求计算数组中相邻元素之间的最小差值。一种有效的方法是首先对数组进行排序,这样可以确保相邻元素的差值能够被系统地比较。排序完成后,我们遍历数组,计算每对相邻元素的差值。在遍历过程中,我们持续记录并更新发现的最小差值。通过这种方式,当遍历结束时,我们得到的将是数组中所有相邻元素差值中的最小值。
3.代码
from typing import List
class Solution:
def findValueOfPartition(self, nums: List[int]) -> int:
n = len(nums)
nums.sort()
ans = float('inf')
for i in range(1, n):
ans = min(ans, abs(nums[i] - nums[i - 1]))
return ans
if __name__ == "__main__":
solution = Solution()
nums = [100, 1, 10]
print(solution.findValueOfPartition(nums))
4.总结
一开始拿到数据类型的题目,第一反应是排序+双指针,后续发现这道题目求的是最小差值,所以放弃左端点和右端点两个双指针,采用计算相邻差值的方法来实现.