题目描述
给定一个整数数组 nums 和一个目标整数 target,你需要找到数组中最接近目标整数的数。如果有多个数都离目标整数一样近,则返回其中任意一个。
输入:
- 一个整数数组 nums。
- 一个整数 target。
输出:
- 返回数组中最接近目标整数的数。
示例:
- 输入:nums = [1, 3, 5, 7], target = 4
- 输出:3 或 5(因为 3 和 5 都离 4 一样近)
解题思路
- 初始化两个变量:closest 用于存储当前最接近目标整数的数,minDiff 用于存储当前最小差值。
- 遍历数组 nums:
- 计算当前数 num 与目标整数 target 的差值 diff。
- 如果 diff 的绝对值小于 minDiff,则更新 closest 为当前数 num,并更新 minDiff 为 diff 的绝对值。
- 如果 diff 的绝对值等于 minDiff,则可以选择更新 closest 为当前数 num(因为题目允许返回任意一个最接近的数)。
- 返回 closest。
Java 代码解析
public class ClosestNumber {
public int findClosest(int[] nums, int target) {
int closest = nums[0];
int minDiff = Math.abs(nums[0] - target);
for (int num : nums) {
int diff = Math.abs(num - target);
if (diff < minDiff) {
closest = num;
minDiff = diff;
}
}
return closest;
}
public static void main(String[] args) {
ClosestNumber cn = new ClosestNumber();
int[] nums = {1, 3, 5, 7};
int target = 4;
System.out.println(cn.findClosest(nums, target)); // 输出 3 或 5
}
}
C++ 代码解析
#include <iostream>
#include <vector>
#include <cmath>
#include <climits>
using namespace std;
int findClosest(vector<int>& nums, int target) {
int closest = nums[0];
int minDiff = abs(nums[0] - target);
for (int num : nums) {
int diff = abs(num - target);
if (diff < minDiff) {
closest = num;
minDiff = diff;
}
}
return closest;
}
int main() {
vector<int> nums = {1, 3, 5, 7};
int target = 4;
cout << findClosest(nums, target) << endl; // 输出 3 或 5
return 0;
}
Python 代码解析
def find_closest(nums, target):
closest = nums[0]
min_diff = abs(nums[0] - target)
for num in nums:
diff = abs(num - target)
if diff < min_diff:
closest = num
min_diff = diff
return closest
# 测试用例
nums = [1, 3, 5, 7]
target = 4
print(find_closest(nums, target)) # 输出 3 或 5