1478. 最接近target的值

博客围绕在给定数组中寻找两个数,使其和最接近目标值且不超过目标值展开。给出了具体示例,如目标值为15,数组为[1,3,5,11,7],结果为14。还介绍了先排序,用start和end相加比较差值等求解方法。

给出一个数组,在数组中找到两个数,使得它们的和最接近目标值但不超过目标值,返回它们的和

描述
给出一个数组,在数组中找到两个数,使得它们的和最接近目标值但不超过目标值,返回它们的和

如果没有满足要求的结果就返回 -1.

Input:target = 15
array = [1,3,5,11,7]
Output:14

先排序,然后start 和 end 相加得到number
如果这个 target - number 与 min 相比较大小,小的赋予min

如果比完 min == Integer.MAX_VALU 那么 数组中 任意那个数相加 大于 target

如果 不等于 target 减去 min 即可

public class Solution {
    /**
     * @param target: the target
     * @param array: an array
     * @return: the closest value
     */
    public int closestTargetValue(int target, int[] array) {
        // Write your code here
        Arrays.sort(array);

        int start = 0;
        int end = array.length - 1;
        int min = Integer.MAX_VALUE;
        while (start < end) {
            int number = array[start] + array[end];
            if (number < target) {
                start++;
                min = Math.min((target - number), min);
            } else if (number > target) {
                end--;
            } else {
                return target;
            }
        }
        if (min == Integer.MAX_VALUE) {
            return -1;
        }

        return target - min;

    }
}
计算接近,可根据同的场景采用同的方法: ### 从一组数中找接近给定的数 - 遍历比较法:对于一组离散的数据,给定一个目标值,可通过遍历这组数据,计算每个数目标值的差的绝对,绝对小的数就是接近目标值的数。 ```python def find_closest_number(numbers, target): closest = numbers[0] min_diff = abs(numbers[0] - target) for num in numbers: diff = abs(num - target) if diff < min_diff: min_diff = diff closest = num return closest numbers = [1, 3, 5, 7, 9] target = 4 result = find_closest_number(numbers, target) print(result) ``` ### 函数上找接近 - 二分查找法:如果函数是单调的,可使用二分查找法来找到接近目标值的自变量对应的函数。先确定一个搜索区间,然后断将区间二分,根据中间点的函数目标值的大小关系,缩小搜索区间,直到满足一定的精度要求。 ```python def binary_search_closest(func, target, left, right, tolerance=1e-6): while (right - left) > tolerance: mid = (left + right) / 2 mid_value = func(mid) if mid_value < target: left = mid else: right = mid return func((left + right) / 2) def example_function(x): return x ** 2 target = 5 left_bound = 0 right_bound = 3 closest_value = binary_search_closest(example_function, target, left_bound, right_bound) print(closest_value) ``` ### 统计数据中的近似 - 插法:在统计数据中,如果已知一些离散的数据点,要找到接近某个的近似,可使用插法,如线性插。假设有个相邻的数据点 $(x_1, y_1)$ $(x_2, y_2)$,目标值为 $x$,且 $x_1 < x < x_2$,则线性插公式为: $$y = y_1+\frac{(y_2 - y_1)}{(x_2 - x_1)}(x - x_1)$$
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值