找到一个数组中相加为特定数值的两个元素
来源:互联网 发布:网络负面新闻消除方案 编辑:程序博客网 时间:2024/05/21 14:56
作者:lty
时间:2017/7/8 14:39:44
题目:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。您可以假设每个输入都只有一个解决方案,而您可能不会使用相同的元素两次。eg: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]
答:(1)我的做法思路:通过两个循环,让每一个元素和它后面的所有元素相加然后判断是否是特定值。
代码: var twoSum = function(nums, target) { var lt = nums.length; var arr = []; for (var i=0;i<lt;i++) { for (var y=0;y<lt-i-1;y++) { if((nums[i] + nums[i+1+y]) == target) { arr[0] = i; arr[1] = i+1+y; return arr; } } } return false; }; console.log(twoSum([2,7,11,15],17));测试:
时间复杂度:
空间复杂度:
(2)因为觉得我的做法的时间复杂度会高,因为有循环套着一个循环。所以在网上又寻找别人的做法。
代码: var twoSum = function(nums,target) { var arr = []; var exist = []; for(var i = 0;i < nums.length;i++) { if(typeof(exist[target-nums[i]]) !== 'undefined') { arr.push(exist[target-nums[i]]); arr.push(i); } exist[nums[i]] = i; } return arr; };
测试结果相同。
思路分析:将值变成另一个数组的key,将key变成值。因为每次循环的时候,target-num[i]的值就是要寻找的值,而如果在一个数组中寻找该值,因为不知道该值对应的key,所以没法寻找。如果变成寻找的是key,就只需要判断数组有没有这个key就可以了,所以才会在exist数组中将key和value互换。因为是按顺序判断每个元素的,所以,如果发现exist中没有某个元素,就将其加入到exist中,以备后面的元素继续判断。
时间复杂度:
空间复杂度:
阅读全文
0 0
- 找到一个数组中相加为特定数值的两个元素
- LeetCode 1. Two Sum--数组中两元素相加为该数值,输出对应的两个索引
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 两个数组,大小都为n,两个数组里有相同的元素,设计一个算法,找到两个数组中相同的元素
- 数组中相加之和等于特定值的元素
- 找到两个数的差为一个特定数
- 找到两个数的差为一个特定数
- LeetCode 454. 4Sum II--在四个等长的数组中,找到有多少个四元组的数值之和为0(每个数组中各占一个元素)
- 第十四题(升序数组中寻找和为特定数的两个元素)
- Two Sum 从数组中找到两个位置的值相加和为给定目标的值
- 【算法王道】找到数组中两个元素相加等于指定数
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值
- 求无序数组中两元素相加等于特定值的索引
- 求无序数组中三元素相加等于特定值的所有情况
- 求无序数组中四元素相加等于特定值的所有情况
- 从一个数组中找到和为定值的两个数
- 两个数组逆排元素对应相加,返回一个数组
- 自定义View 相关(二)
- Leetcode# Reverse String
- 如何在Linux 4.12内核添加系统调用
- Struts2 简介(三)
- Hibernate四天学习之第一天
- 找到一个数组中相加为特定数值的两个元素
- 腾讯课堂前端训练营已发车,快上车,带你十天拿下秋招offer
- JavaScript基础之___函数
- openCV实现图像边缘检测
- 网络层(三)IP协议
- 实战「 docker TLS加密通讯 」
- 第一次调通struts2笔记
- Spring MVC 中@RequestMapping 6个基本用法
- Linux学习笔记--git的常用命令