两数之和

问题描述:

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

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

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

代码:

package algorithm;

import java.util.Arrays;

import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;

public class Solution {

// 解法1:暴力法

public int[] twoSum(int[] nums, int target) {

int i, j;

int sum;

// 外层循环遍历每一个元素

for (i = 0; i <= nums.length; i++) {

// 内层循环遍历除i以外的值

// 并判断是否存在一个值与nums[i]之和等于target

for (j = i + 1; j <= nums.length; j++) {

sum = nums[i] + nums[j];

if (sum == target) {

return new int[] { i, j };

}

}

}

throw new IllegalArgumentException("No two sum solution");

}

// 解法2 两遍哈希表

public int[] twoSum_1(int[] nums, int target) {

Map map = new HashMap<>();

// 第一个循环,将数据元素的值和索引存到哈希表中

for (int i = 0; i < nums.length; i++) {

map.put(nums[i], i);

}

// 第二个循环,遍历各元素与目标值target的差值,是否存在于哈希表中

// 存在则输出该值与差值的索引值

for (int i = 0; i < nums.length; i++) {

int complement = target - nums[i];

if (map.containsKey(complement) && map.get(complement) != i) {

return new int[] { i, map.get(complement) };

}

}

throw new IllegalArgumentException("No two sum solution");

}

// 解法3 一遍哈希表

// 在迭代并将元素插入到哈希表中的同时,先校验哈希表中是否存在当前元素所对应的目标元素,如果有则直接返回

public int[] twoSum_2(int[] nums, int target) {

Map map = new HashMap<>();

for (int i = 0; i < nums.length; i++) {

int complement = target - nums[i];

if (map.containsKey(complement)) {

return new int[] {i,map.get(complement)};

}

map.put(nums[i], i);

}

throw new IllegalArgumentException("No two sum solution");

}

// main

public static void main(String[] args) {

Solution solution = new Solution();

Scanner input = new Scanner(System.in);

System.out.println("请输入数组长度:");

int n = input.nextInt();

int[] nums = new int[n];

for (int i = 0; i < n; i++) {

System.out.println("输入第" + i + "个数:");

nums[i] = input.nextInt();

}

System.out.println("请输入目标值:");

int m = input.nextInt();

int target = m;

System.out.println("目标值:" + target);

System.out.println("整数数组 nums=" + Arrays.toString(nums));

// 计算一个方法执行时长,可用模板来写

long startTime = System.currentTimeMillis();

//int[] twoSum = solution.twoSum(nums, target);

//int[] twoSum_1 = solution.twoSum_1(nums, target);

int[] twoSum_2 = solution.twoSum_2(nums, target);

long endTime = System.currentTimeMillis();

float excTime = (float) (endTime - startTime) / 1000;

System.out.println("结果=" + Arrays.toString(twoSum_2) + ",执行时间=" + excTime + 's');

}

}

java 两数之差_1_两数之和(java)相关推荐

  1. java 计算两个日期相差月数_Java简单计算两个日期月数差的方法

    本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @ ...

  2. Java 递归解决 quot;仅仅能两数相乘的计算器计算x^yquot; 问题

    Java 递归解决 "仅仅能两数相乘的计算器计算x^y" 问题 /*** 求一个数的乘方* 求x^y,y是一个正整数. 设计算器仅仅能计算两数相乘,不能一次计算n个数相乘. * 知 ...

  3. java中算两个时间内的秒数_java – Joda Time – 计算两个日期之间的秒数会引发异常....

    我使用以下代码来计算两个日期之间的秒数差异: long secondsBetween = (Seconds.secondsBetween(new LocalDate("1901-01-01& ...

  4. JAVA简单计算器(简单实现两数加减乘除)

    文章目录 前言 简易计算器 前言 今日的小练习为用户输入两个数,简易实现两数的加减乘除并可重复使用. 实现这个小功能有了大概的思路其实还好,但是我却没有止步于此,为了提升用户的体验性,保证这个小程序的 ...

  5. 如何用python计算excel两行之间的差值_excel表格求两列数据差值-怎样在EXCEL表格中求两列数的差?...

    怎样在EXCEL表格中求两列数的差? 1.双击打开需行求差的Excel表格,Excel表格. 2.在进入Excel表格后,使用鼠标需差的单元格,先选中其中一行即可. 3.在选中一行后,在单元格内输入& ...

  6. Java计算两个日期相差的月数

    /*** 获取两个日期相差的月数*/public static int getMonthDiff(Date d1, Date d2) {Calendar c1 = Calendar.getInstan ...

  7. 【C语言习题】两素数之差为2,则称该两素数为双胞胎数。求出[2,300]内双胞胎数。

    问题 两素数之差为2,则称该两素数为双胞胎数.求出[2,300]内: 所有素数并保存到文件prime.txt中: 有多少对双胞胎数: 最大的一对双胞胎数. 分析 首先脑子里要有文件操作的框架, 其次要 ...

  8. C语言习题:/*键盘输入两个非零整数A和B,如果A和B都是偶数则输出两个数的和,如果A和B都是奇数则输出两个数的差,如果A是奇数B是偶数则输出两数积,如果A是偶数B是奇数输出AVB结果*/

    #include<stdio.h> /*键盘输入两个非零整数A和B,如果A和B都是偶数则输出两个数的和, 如果A和B都是奇数则输出两个数的差, 如果A是奇数B是偶数则输出两数积, 如果A是 ...

  9. java 日期相差月数_Java计算两个日期相差的月数

    /** * 获取两个日期相差的月数 */ public static int getMonthDiff(Date d1, Date d2) { Calendar c1 = Calendar.getIn ...

最新文章

  1. Html-Css 从入门到放弃(一)基础知识
  2. 小米12系列或首发骁龙898旗舰芯:三星4nm工艺
  3. Jenkins创建新任务
  4. ubuntu 创建桌面图标快捷方式
  5. 百元百鸡 //构造结构体变量
  6. OpenCV DNN调用训练好的caffe 模型(目标检测)
  7. Tomcat8安装与配置
  8. 测试吃鸡游戏帧数软件,帧数暴涨10%+ RX 560D开核“吃鸡”测试
  9. 如何设置BIOS实现远程开机
  10. ITFriend网站内测公测感悟
  11. 基于STM32的I2C通信 2(读写AT24C02)
  12. 虚拟机vmare安装CentOS7详细教程
  13. linux下rsync命令,Linux 命令之rsync命令详解
  14. 软件设计师---UML
  15. 如何快速将pdf表格转换成excel
  16. 程序设计我爱你_如何用爱设计
  17. 什么是大数据?它存在的意义和用途是什么?
  18. srttrail txt无法开机_srttrail.txt怎么修复
  19. 物联网概论(IoT)__Chp1-3 体系架构、射频识别(RFID)
  20. rust潘通色_[转载]PANTONE(潘通色卡)TPX/TCX色号颜色查询--以后不用愁啦!!!...

热门文章

  1. 间接寻址级别不同_单片机指令系统与寻址方式
  2. spring数据字典_Redis为什么默认16个数据库?
  3. 整数分解为若干项之和python_SVD奇异值分解及Python实例
  4. 优秀案例|App内弹窗界面设计灵感
  5. 这样的家居选购界面让你忍不住剁手的冲动!
  6. 完整的金融类APP UI设计素材,深度学习临摹
  7. python在法律中的应用_Python在共轭梯度法中的运用
  8. 疯狂java workflow_疯狂Workflow讲义:基于Activiti的工作流应用开发 完整pdf扫描版[136MB]...
  9. python debug工具_极简Python DeBug工具——PySnooper
  10. 史上最优秀的转换工具类网站推荐[唯一保存历史转换记录]