每日一道面试笔试题--算法--两数之和
2019-06-19 23:31
218 查看
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解析:
可以借助HashMap,将nums加入到HashMap表中,其中nums中的数作为key,索引作为value, 判断Hashmap中存在target-x且这个数的索引值不等于x自身即可。
public class Solution { public static int[] twoSum(int[] nums,int target){ //创建一个数组,返回结果 int[] result = new int[2]; //创建map集合,key为nums中的数,value为其索引 Map<Integer,Integer> map = new HashMap<>(); //遍历nums数组 for (int i = 0; i < nums.length; i++) { //将key,value存放到数组中 map.put(nums[i],i); } //遍历数组nums for (int i = 0; i < nums.length; i++) { //因为两个值相加为target,所以另一个值为target-x int another = target-nums[i]; //判断Hashmap中存在target-x且这个数的索引值不等于x自身 if(map.containsKey(another)&& map.get(another)!=i){ result[0] = i; result[1] = map.get(another); } } return result; } }
测试代码:
public static void main(String[] args) { int[] nums = {2,4,8,5}; int target = 12; //调用求和方法,传递参数测试 int[] result = twoSum(nums, target); System.out.println(result[0]); System.out.println(result[1]); }
输出结果:
1 //1索引:4 2 //2索引:8
相关文章推荐
- 每日一道面试笔试题--Tomcat目录结构
- 每日一道面试笔试题--线程状态
- 每日一道算法题:Google 2009年某笔试题:求出元素位于0到9之间的集合A中大于某个给定正整数K的组成的最小正整数。
- 每日一道面试笔试题--java中的乘除运算及类型转换
- 大公司笔试面试有哪些经典算法题目?
- 每日一道算法题:求一个矩阵中最大的二维矩阵(元素和最大)
- 【面试笔试算法】Problem 7: 补提交卡(hiho题库)
- 机器学习笔试面试系列算法集锦
- 每日一道算法题:数组中出现次数超过一半的数字
- 一道算法笔试题
- 数据结构与算法,每日一道
- 微软等数据结构+算法面试100题(13)--金山笔试题
- 每日一道算法题——最长回文字串
- 面试算法题:从指定数组找出两数的和为指定的数
- 【每日一道算法题】
- 笔试面试----常见算法题
- 笔试面试算法经典--最长回文子串
- 今天面试笔试了一道SQL面试题,狠简单
- 【每日一道算法题】
- 每日一道算法题:打印一维数组的所有组合