华为OD机试之乱序整数序列两数之和绝对值最小(Java源码) 您所在的位置:网站首页 java一行输入两个整数 华为OD机试之乱序整数序列两数之和绝对值最小(Java源码)

华为OD机试之乱序整数序列两数之和绝对值最小(Java源码)

2023-06-23 09:24| 来源: 网络整理| 查看: 265

乱序整数序列两数之和绝对值最小

题目描述

给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。

每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

输入描述

一个通过空格分割的有序整数序列字符串,最多1000个整数,且整数数值范围是 [-65535, 65535]。

输出描述

两数之和绝对值最小值

用例 输入-1 -3 7 5 11 15输出-3 5 2说明因为 |nums[0] + nums[2]| = |-3 + 5| = 2 最小,所以返回 -3 5 2。

解析

使用for循环暴力组合破解将数分组 正数一组,负数一组 分组后排序 2.1. 若全正,则找最小的两个 若全负 则找最大的两个 2.2. 若正负结合,则合并两个列表 使用双指针进行求解 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; //-1 -3 7 5 11 15 public class T57 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); List positiveNums = new ArrayList(); List negativeNums = new ArrayList(); Arrays.stream(sc.nextLine().split(" ")).forEach(item -> { int num = Integer.parseInt(item); if (num positiveNums.add(num); } }); positiveNums.sort((a, b) -> a - b);// 升序 negativeNums.sort((a, b) -> b - a);// 降序 //System.out.println(positiveNums); //System.out.println(negativeNums); if(positiveNums.size()==0) { //纯负数 System.out.println(negativeNums.get(1)+" "+negativeNums.get(0)+" "+Math.abs(negativeNums.get(1)+negativeNums.get(0))); } if(negativeNums.size()==0) { System.out.println(positiveNums.get(0)+" "+positiveNums.get(1)+" "+Math.abs(positiveNums.get(0)+positiveNums.get(1))); } if(negativeNums.size()>0&&positiveNums.size()>0) { //组合 就得组合了 说不定负数那边前两个 正数那边前两个 亦或者 一正一负 int min=Integer.MAX_VALUE; int minNumber=negativeNums.get(negativeNums.size()-1); int maxNumber=positiveNums.get(positiveNums.size()-1); if(negativeNums.size()>=2&&negativeNums.get(0)+negativeNums.get(1) min=Math.abs(positiveNums.get(0)+positiveNums.get(1)); minNumber=positiveNums.get(0); maxNumber=positiveNums.get(1); } //双指针 int left=0; int right=1; List numsList=new ArrayList(); numsList.addAll(negativeNums); numsList.addAll(positiveNums); while(left if(min>Math.abs(numsList.get(left)+numsList.get(right))) { min=Math.abs(numsList.get(left)+numsList.get(right)); minNumber=numsList.get(left); maxNumber=numsList.get(right); } //System.out.println(numsList.get(left)+"-"+numsList.get(right)+"-"); right++; } left++; } System.out.println(minNumber+" "+maxNumber+" "+ min); } } }

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有