笔试面试练习题——数组

给出n个正整数,要求找出相邻两个数字差的绝对值最小的一对数字,如果差的绝对值有的相同,则给出最前面的一对数。2<n<100,正整数都在10^16范围内。

import java.util.Scanner;
/*
 * 尤其需要注意正整数的取值范围,已超过int类型的取值范围
 */
public class FindElement {
    public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n = Integer.valueOf(sc.nextLine()) ;
		String str = sc.nextLine();
		sc.close(); 
		// 输入的一行数字转换为long型数组
		long[] a = strToArray(str);
		long[] b =new long[n-1];
		// 寻找满足要求整数对的第一个元素的索引
		int index= searchInd(a,b);
		System.out.println(a[index]+" " +a[index+1]);
	}
    public static int searchInd(long[] a, long[] b ) {
    	//b 数组存储 a数组相邻两元素的差的绝对值
    	for (int i = 0; i < b.length; i++) {
			 long cur=a[i+1]-a[i];
			 b[i] = Math.abs(cur); 
		}
    	// 求最小的差的绝对值,并记录其索引
		long min =b[0];
		int index = 0;
		for (int k = 0; k < b.length; k++) {
			if (min>b[k] ) {
				long temp = min;
				min=b[k];
				b[k]=temp;
				index = k;
			}
		}
		return index;
    }
	public static long[] strToArray(String str) {

		String[] temp = str.split(" ");            
		long[] result = new long[temp.length];       
		for (int i = 0; i < temp.length; i++) {
			result[i] = Long.valueOf(temp[i]);   
		}
		return result;
	}
}

验证

输入:
9
1 3 4 7 2 6 5 12 32
输出:
3 4
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值