CSP题目100分答案 问题描述:给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。 输入格式: 输入第一行包含一个整数n。 第二行包含n个正整数,相邻整数之间使用一个空格分隔
时间: 2024-11-18 16:19:34 浏览: 33
这是一个经典的CSP(Competitive Programming)问题,通常被称为“寻找最接近对”或“绝对差最小的数”。你可以通过以下步骤找到100分的答案:
1. **遍历数组**:首先,我们可以创建一个哈希表(如Python中的字典或C++中的unordered_map),用于存储每个数及其索引。
2. **初始化**:遍历数组,将第一个数的差值设为当前最大数减去它本身,然后将这个差值及对应的最大值存入哈希表中。
3. **比较更新**:对于后续的每个数,计算它与已知最大值之间的差值(即abs(arr[i] - max_val))。如果这个差值小于当前记录的最小差值,就更新最小差值和对应的数。
4. **返回结果**:遍历结束后,哈希表中存储的就是所有数对中差值最小的一对,直接输出这个差值即可。
以下是Python的示例代码:
```python
def min_abs_difference(nums):
n = len(nums)
if n < 2:
return None
nums_dict = {nums[0]: 0}
min_diff = abs(nums[1] - nums[0])
for i in range(1, n):
diff = abs(nums[i] - nums_dict.get(nums[i], float('inf')))
if diff < min_diff:
min_diff = diff
nums_dict[nums[i]] = i
return min_diff
```
阅读全文