最近求职需要重新刷算法题,从今天开始每天至少做一个leatcode的题
如果有更好的算法或者换了语言也会更新

  • 题目:

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。

示例:

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

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

  • 解法 :

官方给了三种解法:

  • 是暴力循环,想的简单,易于理解,但是如果数组里元素很多的话就很卡,复杂度分析:
    时间复杂度:O(n^2) ), 对于每个元素,我们试图通过遍历数组的其余部分来寻找它所对应的目标元素,这将耗费 O(n) 的时间。因此时间复杂度为 O(n^2)。
    空间复杂度:O(1)。

  • 是用哈希表循环两遍,第一遍是录入哈希表,第二遍再循环找一遍,
    复杂度分析:

    时间复杂度:O(n), 我们把包含有 nn 个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1),所以时间复杂度为 O(n)。

    空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n个元素。

  • 是用哈希表循环一遍,在第一遍时一边录入一边排查,之前面试也碰到过这道题,当时面试官给的解法就是这种,相对理想
    复杂度分析
    时间复杂度:O(n), 我们只遍历了包含有 nn 个元素的列表一次。在表中进行的每次查找只花费 O(1) 的时间。
    空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。

  • 代码

var twoSum = function(nums, target) {var result=[];var test=new hashTable();// var i=0;nums.forEach(function(item,index){// console.log("success" +index);if(test.containsKey(target-item)&&item==(target-item)){result.push(test.getValue(target-item),index);test.remove(target-item);//  console.log("same");}     else {test.add(item,index);if(test.containsKey(target-item)&&index!==test.getValue(target-item)){// result.push([test[item],test[target-item]]);result.push(test.getValue(target-item),test.getValue(item));test.remove(item);test.remove(target-item);//    console.log("delete");}}});return result;
};
  • 心得

题不难,主要是练习通过哈希表的排序是怎么用js实现的,哈希表的搜索简单快捷,实现起来也不难。之前没用js做过。
在调试的过程中出现了2回问题

  • 刚开始我只是想把数组的值作为key,序号作为value,没有考虑当两个值都是一样的时候哈希表会覆盖,报了一回错,加了个if判断了一下,就解决了

  • 数据范围考虑不全。没有考虑给的和等于他本身时的情况,报了一回错,加了个if判断了一下,就解决了。

  • 更新

  • 未来想用python实现一下,算法方面应该没什么可优化的了。

转载于:https://www.cnblogs.com/dadaochangcun/p/9806574.html

leetcode算法题01相关推荐

  1. LeetCode算法题-Nth Digit(Java实现)

    这是悦乐书的第215次更新,第228篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第83题(顺位题号是400).找到无限整数序列的第n个数字1,2,3,4,5,6,7,8 ...

  2. LeetCode算法题-Reverse Linked List(Java实现)

    这是悦乐书的第192次更新,第195篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第51题(顺位题号是206).反转单链表.例如: 输入:1-> 2-> 3- ...

  3. LeetCode算法题-Convert a Number to Hexadecimal(Java实现)

    这是悦乐书的第219次更新,第231篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第86题(顺位题号是405).给定一个整数,写一个算法将其转换为十六进制.对于负整数,使 ...

  4. LeetCode算法题-Minimum Depth of Binary Tree(Java实现)

    这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...

  5. LeetCode算法题-Valid Palindrome II(Java实现)

    这是悦乐书的第287次更新,第304篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第155题(顺位题号是680).给定非空字符串s,最多可以删除一个字符. 判断它是否是回 ...

  6. LeetCode算法题-K-diff Pairs in an Array(Java实现)

    这是悦乐书的第254次更新,第267篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第121题(顺位题号是532).给定一个整数数组和一个整数k,您需要找到数组中唯一的k- ...

  7. LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...

  8. LeetCode算法题-Repeated String Match(Java实现)

    这是悦乐书的第289次更新,第307篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是686).给定两个字符串A和B,找到A必须重复的最小次数,使得B是 ...

  9. LeetCode算法题-Factorial Trailing Zeroes(Java实现)

    这是悦乐书的第183次更新,第185篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第42题(顺位题号是172).给定一个整数n,返回n!中的尾随零数.例如: 输入:3 输 ...

最新文章

  1. 独家 | 手把手教你怎样用Python生成漂亮且精辟的图像(附教程代码)
  2. pytorch中的torch.tensor.repeat以及torch.tensor.expand用法
  3. python爬虫挖掘平台搭建_一篇非常棒的安装Python及爬虫入门博文!
  4. 【算法漫画】什么是红黑树?
  5. 利用C#实现标准的 Dispose模式
  6. 文件描述符与打开文件的关系
  7. 手机有没有必要经常更新系统?
  8. matlab提示用户输入参数,调用函数显示输入参数不足
  9. PullToRefresh使用详解(四)--利用回调函数实现到底加载
  10. mongodb的初步使用
  11. 对决:腾讯对360摊牌
  12. 新加坡亲子游,这些热门景点必须安排上
  13. 移动硬盘装ubuntu
  14. 苹果为App订阅付费添加二次确认 避免意外支付情况
  15. 产品读书《创业36条军规》
  16. InnoDB的“无用”知识
  17. 句子很美,看得叫人掉泪
  18. 如何停止CruiseControl在linux平台上的运行。
  19. 永久免费开源在线客服系统推荐收藏
  20. 计算机室设备自查报告,计算机室自检自查报告

热门文章

  1. CentOS下php安装mcrypt扩展
  2. MagicalRecord使用中的注意事项
  3. 给GridView删除列添加删除提示
  4. C#WindowsForm之创建窗体
  5. 标号的类型是near还是far有什么区别,作用是什么?
  6. C程序多线程同时画圆画方
  7. springmvc学习笔记--Interceptor机制和实践
  8. ISP_MPLS *** 理论笔记
  9. SharePoint 2013 Designer系列之数据视图筛选
  10. MySQL如何利用索引优化ORDER BY排序语句