力扣——最小绝对差(Java)


一、题目引出

     问题:给你个整数数组 arr,其中每个元素都 不相同。请你找到所有具有最小绝对差的元素对,并且按升序的顺序返回。

    例:

输入:arr = [4,2,1,3]

输出:[[1,2],[2,3],[3,4]]

输入:arr = [1,3,6,10,15]

输出:[[1,3]]

这次题目也是在数组上面进行操作,通过几次题目可以看出来对于数组的使用还是挺重要的。


二、解题思路

    首先看题目中按升序返回,就很容易想到几种对于数组元素排序的方法——冒泡排序、快排、插入排序等;此处我用的是冒泡排序;除此之外,我相信很多人都是卡在这个List<List<Integer>>上,它跟二维数组十分相似,但不是像二维数组那样维度固定,因此可以用它来保存具有最小绝对差的元素对。


三、List<List<Integer>>用法

  创建:

List<List<元素类型>> 数组名=new ArrayList<List<元素类型>>();

例如:

List<List<Integer>> listList=new ArrayList<List<Integer>>()

存放数据(添加)

List<Integer> list = new ArrayList<>();
list.add(1);//将元素1加入到list数组中
listList.add(list);//将数组list加入到数组listList中,也就是数组的数组

读取数组中元素

listList.get(1).get(2) ;   //先get行号,后get 列号

一维数组读取某一位元素:直接用get(num),其中num代表要读取哪一位


四、源代码

package LeetCode;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Solution {
    public static void bubbeSort(int []arry){ //冒泡排序
        int temp;
        for(int i=0;i<arry.length;i++){
            for(int j=arry.length-1;j>i;j--){
                if(arry[i+1]<arry[i]){
                    temp=arry[i+1];
                    arry[i+1]=arry[i];
                    arry[i]=temp;
                }
            }
        }
    }
    public static List<List<Integer>> minimumAbsDifference(int[] arr) {
        bubbeSort(arr);
        //找出最小绝对差
        int min = arr[1] - arr[0];
        for (int i=2;i<arr.length;i++){
            if(arr[i]-arr[i-1]<min){
                min=arr[i]-arr[i-1];
            }
        }
        //向数组listList中存放数据
        List<List<Integer>> listList = new ArrayList<>();
        for (int i=1; i<arr.length; i++) {
            if (min == arr[i] - arr[i-1]) {
                List<Integer> list = new ArrayList<>();
                list.add(arr[i-1]);//将元素加入到数组中
                list.add(arr[i]);
                listList.add(list);//将数组list加入到listList中
            }
        }
        return listList;
    }

    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        int []arr1 = new int[4];
        System.out.println("向数组中输入四个元素:");
        for(int i =0 ; i<arr1.length;i++){
            arr1[i] = input.nextInt();
        }
        bubbeSort(arr1);
        System.out.println("具有最小绝对差的元素对:");
        System.out.println(minimumAbsDifference(arr1));
    }
}

 五、总结

    通过几次的做题发现,题目的出发都是千变万化,而且总会有你的知识盲区,所以还是得掌握好基础,这样才能避免做一个,第二个还是不会;同样每天得积累非常的重要,慢慢得知识盲区也一定会随之减少,所以我们一定要坚持每天学一点知识,累计成一座知识得大山。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值