Java从一组数组中找出最接近目标值的值

两种算法:

1.原始数据是乱序的

2.原始数据是有序的

1.

 1 package test;
 2
 3 import java.io.File;
 4
 5 public class Test {
 6     /**
 7      * 假设原始数据是乱序
 8      */
 9     static int[] src = new int[] { 25, 68, 5, 38, 2, 15, 90, 55, 46 };
10     /**
11      * 目标值
12      */
13     static int x = 555;
14
15     public static void main(String[] args) {
16         System.out.println(getApproximate(x, src));
17     }
18
19     /**
20      * 获取接近值
21      *
22      * @param x
23      * @param src
24      * @return
25      */
26     private static int getApproximate(int x, int[] src) {
27         if (src == null) {
28             return -1;
29         }
30         if (src.length == 1) {
31             return src[0];
32         }
33         int minDifference = Math.abs(src[0] - x);
34         int minIndex = 0;
35         for (int i = 1; i < src.length; i++) {
36             int temp = Math.abs(src[i] - x);
37             if (temp < minDifference) {
38                 minIndex = i;
39                 minDifference = temp;
40             }
41         }
42         return src[minIndex];
43     }
44 }

运行结果:I/System.out: 90

2.

package test;

import java.io.File;

public class CopyOfTest {
    /**
     * 假设原始数据是有序
     */
    static int[] src = new int[] {  10, 12, 21, 22, 25, 30, 34, 37, 39, 46, 51, 56, 70, 85 };
    /**
     * 目标值
     */
    static int x = 55;

    public static void main(String[] args) {
        System.out.println(getApproximate(x, src));
    }

    /**
     * 获取接近值
     *
     * @param x
     * @param src
     * @return
     */
    private static int getApproximate(int x, int[] src) {
        if (src == null) {
            return -1;
        }
        if (src.length == 1) {
            return src[0];
        }
        int index = -1;
        for (int i = 0; i < src.length; i++) {
            if (src[i] > x) {
                index = i;
                break;
            } else if (src[i] == x) {
                return x;
            }
        }
        if (index == -1) {
            return src[src.length - 1];
        } else if (index == 0) {
            return src[0];
        } else {
            return x - src[index - 1] < src[index] - x ? src[index - 1] : src[index];
        }
    }
}

运行结果:I/System.out: 56

时间: 2024-10-18 04:06:06

Java从一组数组中找出最接近目标值的值的相关文章

刷题之给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数

今天下午,看了一会github,想刷个题呢,就翻出来了刷点题提高自己的实际中的解决问题的能力,在面试的过程中,我们发现,其实很多时候,面试官 给我们的题,其实也是有一定的随机性的,所以我们要多刷更多的题.去发现问题. 题目:     给定一个整数数组 nums 和一个目标值 taget,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 解析: 实际这里就是给你的一个列表的数字,给你一个预期,让你返

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

class Solution { public: vector twoSum(vector& nums, int target) { vector temp; for(int i=0;i<nums.size();i++) { for(int j=i+1;j<nums.size();j++) { if(i!=j) { if(nums[i]+nums[j]==target) { temp.push_back(i); temp.push_back(j); break; } } } } ret

C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置

#include <stdio.h> int main(void) { /* 选择排序算法 原理:从数组中 找出最小的元素然后交换位置: */ int a[10] = {9,5,10,7,2,3,1,6,8,4}; int i=0,j=0; int n = sizeof(a)/4; //外循环n-1轮 for(i=0;i<n-1;i++){ int pos = i;//始终指向最小的位置 for(j=i+1;j<n;j++){ if(a[j]<a[pos]){ pos = j

C语言:对传入sp的字符进行统计,三组两个相连字母“ea”&quot;ou&quot;&quot;iu&quot;出现的次数,并将统计结果存入ct所指的数组中。-在数组中找出最小值,并与第一个元素交换位置。

//对传入sp的字符进行统计,三组两个相连字母“ea”"ou""iu"出现的次数,并将统计结果存入ct所指的数组中. 1 #include <stdio.h> 2 #include <string.h> 3 #pragma warning (disable:4996) 4 void fun(char*sp ,int *ct) 5 { 6 int a=0, b=0, c=0; 7 while (*sp != '\0') 8 { 9 if (*s

笔试题--在一个整数数组中找出第5大的数

/** * 在一个整数数组中找出第5大的数 * 思路是首先在数组中找到最小数,然后依次找到第五大的数 * * @param array * @return */ public static int[] selectionSort(int[] array) { if (array.length == 0) return array; for (int i = 0; i < array.length; i++) { int minIndex = i; for (int j = i; j < arr

数组中找出最小的K个数

题目 给出一个数组,找出K个最小的值 例如给出数组{5,2,4,3,1},给定K值3,则输出结果为{2,3,1} 程序 先给出第一个版本的程序 1 public static void printKNum(int[] source, int k) {//算法入口 2 if (k <= 0) { 3 System.out.println("请出入合法的K值"); 4 } else if (source.length <= k) {//如果数组的长度小于等于K,则全部输出 5

随机为一维数组赋值,找出其中的第二大值

int a[20] = {0}; 为数组中的元素赋值 for (int i = 0;  i < 20; i++) { a[i] = arc4random() % (50 - 10 + 1) + 10; printf("%d", a[i]); printf("\n"); } int max = a[0], sex = a[0]; max最大  sex第二大 for (int i = 0; i < 20; i++) { if (max < a[i])

python3实现在二叉树中找出和为某一值的所有路径

在二叉树中找出和为某一值的所有路径请写一个程序创建一棵二叉树,并按照一定规则,输出二叉树根节点到叶子节点的路径.规则如下:1.从最顶端的根结点,到最下面的叶子节点,计算路径通过的所有节点的和,如果与设置的某一值的相同,那么输出这条路径上的所有节点.2.从根节点遍历树时,请请按照左到右遍历,即优先访问左子树的节点.二叉树创建规则:从上到下一层一层的,按照从左到右的顺序进行构造输入"10,5,12,4,7"值,构造的树如下:1) 102) 10      /    5 3) 10     

[面试题]在数组中找出3个数使得它们和为0

给定一个数组S,试找出3个数a, b, c,使得a+b+c=0.也即从集合中找出所有的和为0的3个数. 例如:集合S={-1,0, 1, 2, -1, 4},则满足条件的3个数有2对:(-1, 0, 1)和(-1, 2, -1).注意(-1,1,0)与(-1,0,1)算同一个解,所以不用重复考虑. 当然该例子集合的解也可以写成:(0, 1, -1)和(2, -1, -1). 参考了:http://blog.csdn.net/wangran51/article/details/8858398,他给