LeetCode——1.Two Sum

来源:互联网 发布:免费虚拟手机号软件 编辑:程序博客网 时间:2024/06/10 01:09

1.问题描述
任给一个整数数组num,一个目标值target,返回这样的一对下标[i,j],要求满足两个下标对应的数组值之和num[i]+num[j]等于target
2.算法介绍
2.1 时间复杂度为O(n^2)
双重循环,蛮力

public class Solution {    public int[] twoSum(int[] nums, int target) {        int result[]=new int[2];        for(int i=0;i<nums.length;i++){            for(int j=i+1;j<nums.length;j++){                if(nums[j]==target-nums[i]){                     result[0]=i;result[1]=j;                     return result;                }            }        }        throw new IllegalArgumentException("NO");    }}

2.2 时间复杂度为O(n)
单重循环,同时利用HashMap,快速O(1)查询

    public int[] twoSun_update(int[] nums,int target){        int result[]=new int[2];        Map<Integer,Integer> table=new HashMap<>();        for (int i = 0; i < nums.length; i++) {            table.put(nums[i],i);            int complement=target-nums[i];            if (table.containsKey(complement)) {               result[0]=i;result[1]=table.get(complement);               return result;            }                   }          throw new IllegalArgumentException("NO");    }

上述算法是在将数组转化为map的同时进行检验。当然,我们也可以先转化后检验,时间复杂度不变。

0 0