leetcode1 Two Sum的JavaScript解答总结

一、问题描述


翻译:

给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字。
你可以假设每一个输入只有一个结果。
举例:
输入:nums=[2, 7, 11, 15], target = 9
输出:[0,1]

二、解答
1.每出现一个值x,直接在数组中寻找是否有等于(target-x)的值

 1 /**
 2  * @param {number[]} nums
 3  * @param {number} target
 4  * @return {number[]}
 5  */
 6 var twoSum = function(nums, target) {
 7     for (var i = 0; i < nums.length; i++) {
 8         for (var j = i + 1; j < nums.length; j++) {
 9             if (nums[j] == target - nums[i]) {
10                var arr=[i,j];
11                return arr;
12             }
13         }
14     }
15 };

时间复杂度为O(n*n),空间复杂度为O(1),beats 57.50%,感觉没有办法进一步增加时间复杂度了,有点慌。

2.受到类似hash表的启发,把数组的值和序号对应起来处理。

 1 /**
 2  * @param {number[]} nums
 3  * @param {number} target
 4  * @return {number[]}
 5  */
 6 //by user MarsFreewill
 7 var twoSum = function(nums, target) {
 8     var ans = [];
 9     var map = [];
10     for (var i = 0; i < nums.length; i++) {
11         if (map[target - nums[i]] !== undefined) {
12             ans[0] = parseInt(map[target - nums[i]]) ;
13             ans[1] = i;
14             return ans;
15         }
16     map[nums[i]] = i;
17 }
18 }

时间复杂度为O(n),空间复杂度为O(n),么法,牺牲空间换时间,beats 97.22%。

时间: 2024-11-15 00:31:45

leetcode1 Two Sum的JavaScript解答总结的相关文章

leetcode-1 Two Sum 找到数组中两数字和为指定和

 问题描述:在一个数组(无序)中快速找出两个数字,使得两个数字之和等于一个给定的值.假设数组中肯定存在至少一组满足要求. <剑指Offer>P214(有序数组) <编程之美>P176 Que:Given an array of integers, find twonumbers such that they add up to a specific target number. The function twoSum should return indices ofthe tw

LeetCode1 Two Sum **

题目: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note t

leetcode1 Two Sum题解

题目大概意思就是,我给你传进来一个vector容器和一个target,vector相当于一个数组,现在问target是有数组种哪两个数组成的,返回两个下标,注意函数的返回类型也是vector类型的,所以一定要注意. 题目刚到手的时候,发现这个与各大OJ套路不太一样啊,也就是与ACM不太一样,我还傻傻的调整输出格式什么的,而且这个是完善一个类的成员函数,而不是提交一个可以运行的完整代码,觉得还是挺新奇的. 思路分析 最开始的时候,以为这个如果数据量不是很大的时候可以桶排序暴力破解啊,我见建立了一个

LeetCode Javascript解答 258. Add Digits

258. Add Digits Digit root 数根问题 /** * @param {number} num * @return {number} */ var addDigits = function(num) { var b = (num-1) % 9 + 1 ; return b; }; //之所以num要-1再+1;是因为特殊情况下:当num是9的倍数时,0+9的数字根和0的数字根不同. 性质说明 1.任何数加9的数字根还是它本身.(特殊情况num=0) 小学学加法的时候我们都明白

js 函数声明方式以及javascript的历史

1.function  xx(){} 2.匿名方式   window.onload=function(){dslfjdslfkjdslf}; 3.动态方式  var demo=new Function('x','y','var y=x+y;return y;'); var sum=demo(4,55); alert(sum); 一.JavaScript的历史 a) 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名Scrip

【LeetCode】Path Sum

题目 Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum. For example: Given the below binary tree and sum = 22, 5 / 4 8 / / 11 13 4 / \ 7 2 1 return true,

JavaScript、Ajax与jQuery的关系

简单总结: 1.JS是一门前端语言. 2.Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新. 3.jQuery是一个框架,它对JS进行了封装,使其更方便使用.jQuery使得JS与Ajax的使用更方便 详细情况: Actually only one of them is a programming language. Javascript is a programming language which is used mainly in

JavaScript中赋值运算符的使用

JavaScript中的赋值运算可以分为简单赋值运算和复合赋值运算.简单赋值运算是将赋值运算符(=)右边表达式的值保存到左边的变量中:而复合赋值运算混合了其他操作(例如算术运算操作)和赋值操作.例如: sum+=i; //等同于sum=sum+i; JavaScript中的赋值运算符如下表所示.例如,某员工的月薪为5000元,扣除各项保险费用共500元,个人所得税起征点是3500元,税率为3%,计算该员工的实际收入是多少.代码如下: 01 <script type="text/javasc

19天学完C++Primer【2】

2.1:类型int,long,long long和short的区别是什么?无符号类型和带符号类型的区别是什么?float和double的区别是什么? 解答: 一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大.一般来讲short 最小16位 int 最小16位 long最小32位long long最小64位.float单精度浮点数,6位有效数字.double双精度浮点数10位有效数字.无符号类型和有符号类型区别在于有符号类型存