博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode刷题0001_two-sum
阅读量:6847 次
发布时间:2019-06-26

本文共 1410 字,大约阅读时间需要 4 分钟。

题目要求

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0, 1].复制代码

方法一:暴力破解法

暴力法很简单,遍历每个元素 xx,并查找是否存在一个值与 target−x 相等的目标元素。

复杂度分析

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

代码实现java

class Solution {  public int[] twoSum(int[] nums, int target) {    for(int i = 0 ; i < nums.length; i ++){      for(int j = 0 ; j < nums.length ; j ++){        if(nums[i] + nums[j] == target){          int[] res = {i, j};          return res;        }      }    }    throw new IllegalStateException("the input has no solution");  }}复制代码

方法二:哈希表

使用HashMap,基本思路是:用数组的值作为key,index作为value。对数组进行迭代的时候,将元素插入到hashMap中的,这时我们回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。

复杂度分析

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

java代码实现

class Solution {    public int[] twoSum(int[] nums, int target) {        HashMap
map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int temp =target-nums[i]; if(map.containsKey(temp)){ // 返回布尔 return new int []{map.get(temp),i}; } map.put(nums[i],i); // key value } throw new IllegalStateException("the input has no solution"); }}复制代码

转载地址:http://dfmul.baihongyu.com/

你可能感兴趣的文章
比特币现金对穷人更友善
查看>>
DUBBO服务治理
查看>>
自定义Dialog
查看>>
值类型+引用类型+ref
查看>>
菱形组网之BGP MED、负载分担及GR篇
查看>>
Linux系统调优
查看>>
MySQL主从数据库同步延迟问题解决
查看>>
JQuery EasyUI后台UI框架使用连载
查看>>
看我linux如何防SYN***
查看>>
面向接口编程详解(二)——编程实例
查看>>
简单演示django使用二
查看>>
墨菲定律(侥幸定律)
查看>>
DNS之智能DNS二(Windows)
查看>>
批量修改文件后缀名的方法(当前目录及子目录)
查看>>
Linux Shell脚本攻略
查看>>
[信息图]手机进化史
查看>>
我的友情链接
查看>>
“我来管管看”系列:采购误差缘何而来?
查看>>
关于iSCSI的一些介绍
查看>>
iptables 学习笔记
查看>>