有两组数据,大小不同 比如list1【1,2,3,5】和list2【9,26,47】list1中的每一个元素与list2中的每个元素做减法,求出最小值,并求出是哪两个数相减最小怎么实现,最好是JAVA

解决方案 »

  1.   

    没考虑效率。import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Test {
        public static void main(String[] args) {
            List<Integer> l1 = new ArrayList<Integer>();
            l1.add(1);
            l1.add(2);
            l1.add(3);
            l1.add(5);
            
            List<Integer> l2 = new ArrayList<Integer>();
            l2.add(9);
            l2.add(26);
            l2.add(47);
            
            Map<String, Integer> map = new HashMap<String, Integer>();
            
            for(int i=0; i<l1.size(); i++) {
             for(int j=0; j<l2.size(); j++) {
             int v1 = l1.get(i);
             int v2 = l2.get(j);
             map.put("("+v1 + ", " + v2 + ")", v1-v2);
             }
            }
            
            Set<String> set = map.keySet();
            int min = Integer.MAX_VALUE;
            for(String s : set) {
             if(map.get(s) < min)
             min = map.get(s);
            }
            
            for(String s : set) {
             if(map.get(s) == min)
             System.out.println(s);
            }
        }
    }
      

  2.   

    package CSDN;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Iterator;
    import java.util.List;public class TestThread
    {
    public static void main(String[] args)
    {
    ArrayList<Integer> list1 = new ArrayList<Integer>();

    list1.add(1);
    list1.add(2);
    list1.add(3);
    list1.add(5);

    ArrayList<Integer> list2 = new ArrayList<Integer>();

    list2.add(9);
    list2.add(26);
    list2.add(47);

    List<Integer> list3 = new ArrayList<Integer>();

    for(int i = 0; i < list1.size(); i++)
    {
    for(int j = 0; j < list2.size(); j++)
    {
    list3.add(list1.get(i) - list2.get(j));
    }
    }

    Collections.sort(list3);  //由小到大排序

    System.out.println("最小值为:" + list3.get(0));

    }
    }
      

  3.   

    这个如果求的不是相减后绝对值最小,那么就用第一个list中的最小值减去第二个list中的最大值,就是楼主要求的了。
      

  4.   

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    public class TestMin {
    public static void main(String arg[])
    {


    List <Integer>a=new ArrayList<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    List <Integer>b=new ArrayList<Integer>();
    b.add(9);
    b.add(26);
    b.add(47);
    Collections.sort(a);
    Collections.sort(b);
    System.out.println(a.get(0)-b.get(b.size()-1));

    }}
      

  5.   

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    public class TestMin {
    public static void main(String arg[])
    {


    List <Integer>a=new ArrayList<Integer>();
    a.add(1);
    a.add(2);
    a.add(3);
    a.add(4);
    List <Integer>b=new ArrayList<Integer>();
    b.add(9);
    b.add(26);
    b.add(47);
    Collections.sort(a);
    Collections.sort(b);
    System.out.println(a.get(0)-b.get(b.size()-1));

    }}
      

  6.   

    如果不是绝对值最小,用6L说的
    Collections.sort(l1);
    Collections.sort(l2);
    int min = l1.get(0) - l2.get(l2.size()-1);否则就采用遍历就可以了
    借用4L的代码import java.util.*;
    public class Test {
        public static void main(String[] args) {
            List<Integer> l1 = new ArrayList<Integer>();
            l1.add(1);
            l1.add(2);
            l1.add(3);
            l1.add(5);
            
            List<Integer> l2 = new ArrayList<Integer>();
            l2.add(9);
            l2.add(26);
            l2.add(47);
            
            int v1=0, v2=0, min=Integer.MAX_VALUE;
            for (int i : l1) {
                for (int j : l2) {
                    int v = Math.abs(i-j); //绝对值最小
                      if (v < min) {
                        min = v;
                        v1 = i;
                        v2 = j;
                    }
                }
            }
            System.out.printf("min=l1:[%d]-l2:[%d]=%dn", v1, v2, min);
        }
    }
      

  7.   

    如果是绝对值,则两个数组排序+二分。时间复制到好过long(m*n)的.
      

  8.   

    如果是绝对值。可以两个list合到一起排序。然后计算相邻的两个值的差值(两个值原来不在同一list的前提下,在同一list略过),取最小即可。