Leetcode1.两数之和

题目:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

答案:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        int i,j;
        for(i=0;i

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

借助Map存储已经遍历过的数字,只需要一次for循环

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        Map map = new HashMap();
        for(int i=0;i

补充知识(我忘记的知识):

1. Map及其实现类对比

java.util.Map:存储一对一对的数据(key-value键值对)

        |----HashMap:主要实现类;线程不安全的,效率高;可以添加null的key和value值;底层使用数组+单向链表+红黑树结构存储(jdk8)

                |---- LinkedHashMap:是HashMap的子类;在HashMap使用的数据结构基础上,增加了一对双向链表,用于记录添加的先后顺序

        |---- TreeMap:底层使用红黑树存储;可以按添加的key元素的指定的属性大小顺序进行遍历

        |---- Hashtable:古老实现类;线程安全的,效率低;底层使用数组+单向链表结构存储

                |---- Properties:key和value都是String类型;常用来处理属性文件

Map map = new HashMap();
map.put(null, null);

0825(day1)

你可能感兴趣的:(算法,leetcode,数据结构)