问题:

给定一个整数数组 nums 和一个目标值 target,
请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。
但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

解法一:多层循环暴力解法

 public static int[] getIndex1(int[] arrs, int target) {int[] indexArr = new int[2];for (int i = 0; i < arrs.length; i++) {for (int j = i + 1; j < arrs.length; j++) {if (arrs[i] + arrs[j] == target) {indexArr = new int[]{i, j};}}}return indexArr;}

解法分析: 暴力循环就是把数组中的元素进行两次遍历,每次和后面的元素进行相加, 再和目标值进行比较,如果能找到两数之和为目标值的元素,就返回这两个元素的下标。

时间复杂度: O(n^2), 每次循环遍历数组的元素耗费O(n)的时间,最坏的情况就是两层循环完还没找到对应目标值的元素,消耗O(n ^2)的时间。

解法二: 双指针法

public static int[] getIndex(int[] arrs, int target) {Arrays.sort(arrs);int[] result = new int[2];int left = 0;int right = arrs.length - 1;while (left < right) {if ((arrs[left] + arrs[right]) < target) {left++;}if ((arrs[left] + arrs[right]) > target) {right--;} else {result = new int[]{left, right};break;}}return result;}

解法分析: 双指针的思路其实就是二分查找,前提是要查找的数组是个有序数组,定义两个标记(就是数组中元素的索引) left 、right,left 初值为0,right 初值为数组中最后一个元素的索引,然后开始把这两个索引对应的元素之和与 target 值进行比较,若和值小于 target 的值,就把 left++,若和值大于 target 的值,就把 right- -,如果找的 target 所对应的两个元素的索引,就返回这两个索引数组,否则就返回空值。

时间复杂度: O(n)

解法三:哈希表遍历

public static int[] getIndex1(int[] arrs, int target) {int[] result = new int[2];HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0; i < arrs.length; i++) {hashMap.put(arrs[i], i);}for (int i = 0; i < arrs.length; i++) {int mid = target - arrs[i];if (hashMap.containsValue(mid) && hashMap.get(mid) != i) {result = new int[]{i, hashMap.get(mid)};}}return result;}

解法分析: 先遍历一遍数组,将数组中的元素和它们的索引以键值对的方式存进 HashMap ,然后在遍历数组,定义一个中间值,中间值等于 target 减去数组中的每个元素,若 HashMap 中存在这个值且这个值不是重复使用,就存在所求的两个元素。由于把数组中的元素和索引存进哈希表中时时键存元素值,值存数组索引,所以限制了目标数组不能有重复值。

时间复杂度: O(n)

LeetCode----两数之和相关推荐

  1. leetcode 两数之和 整数反转 回文数 罗马数字转整数

    1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  2. leetcode两数之和

    #####两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15 ...

  3. leetcode两数之和,三数之和,四数之和问题

    1. 两数之和 遍历数组的同时,使用字典(哈希表)记录数对应的索引,对于每一个数nums[i],判断 target-nums[i]是否在字典中,找到一个即返回.若列表中的与元素有重复也可这样处理,因为 ...

  4. LeetCode两数之和 56 python

    描述 中文 English 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范 ...

  5. Leetcode——两数之和

    这题有一个很简单的解决办法,就是暴力求解法,跟其他语言是一样的,但是就只是语言的书写形式上不一样. 思路:两层循环遍历,一个值一个值的试,最后找出最终的结果 class Solution(object ...

  6. LeetCode 两数之和

    题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不 ...

  7. [LeetCode] 两数之和

    英文描述 Given an array of integers, return indices of the two numbers such that they add up to a specif ...

  8. LeetCode 两数之和(Two Sum)

    题目 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例 给定 nums = [2, 7, 11, 15], targe ...

  9. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  10. 【LeetCode】两数之和、三数之和、四数之和系列

    文章目录 两数之和★ 三数之和★★ 四数之和★★ 四数相加Ⅱ★★ 最接近的三数之和★★ 此篇文章总结下力扣中的两数之和.三数之和.四数之和及一系列求数组中满足达到目标值的元组个数的问题,仔细阅读下面的 ...

最新文章

  1. 搞定JSP第一个Servlet例子并且还是手动编译
  2. 【shell】wc命令
  3. 【转】MATLAB如何制作动画(动态图形演示movie)
  4. linux_unix编程手册--信号处理函数
  5. Python Django 多对多表设计批量插入方法示例
  6. Linux系统编程:fork函数的使用【循环创建N个子线程】
  7. mysql大批量数据写入_存储过程写入大批量数据,用于测试mysql查询优化
  8. SPH(光滑粒子流体动力学)流体模拟实现三:Marching Cube算法(2)
  9. 考研计算机网络,2020计算机专业考研的计算机网络部分知识点
  10. linux 下载python命令_Linux下修改Python命令的方法示例(附代码)
  11. Mongo_安装 centos
  12. 哈夫曼编码(Huffman Coding) cpp完整代码实现 详细注释 ASCII码表
  13. ps怎么加底部阴影_ps物体底部阴影怎么做阴影有立体感
  14. 免费域名邮箱如何申请?怎么给国外发邮件?
  15. win10蓝屏无法进入系统_WIN10系统进“吃鸡”蓝屏
  16. 网页制作中的超链接怎么做
  17. chemdraw如何改中文_教您如何掌握ChemDraw页面设置技巧
  18. 【STM32笔记】HAL库低功耗STOP停止模式的串口唤醒(解决进入以后立马唤醒、串口唤醒和回调无法一起使用、接收数据不全的问题)
  19. 在Windows 7下删除注册表项时,权限不足
  20. ORA-01122 ORA-01207问题

热门文章

  1. 清除chrome69缓存批处理(保存为.bat格式文件,如test.bat)
  2. react native中使用 react-native-easy-toast 和react-native-htmlview
  3. 最小生成树相关知识链接
  4. 公网服务器与局域网手机长连接
  5. Java 连接SQLite数据库
  6. 元素“UpdateProgress”不是已知元素。原因可能是网站中存在编译错误
  7. 人工智能机器学习笔记 10月10日
  8. 高德推出查岗功能_高德查岗功能怎么用 「家人地图」新功能_位置在哪
  9. c语言贪吃蛇最简单代码_让我们跑一个最简单的GAN网络吧!(附Jupyter Notebook 代码)...
  10. 拓端tecdat|R语言中GLM(广义线性模型),非线性和异方差可视化分析