LintCode 607 · 两数之和 III-数据结构设计

题目链接:两数之和三-数据结构设计

领扣 两数之和 III-数据结构设计

  • 1、题目
  • 2、思路
  • 3、题解代码——Java版本


1、题目

描述
设计并且实现一个TwoSum类,需要支持如下操作:

  • add:把这个数添加到内部的数据结构中
  • find:是否存在任意一对数字之和等于这个数值。

样例

add(1);add(3);add(5);
find(4)//返回true
find(7)//返回false

2、思路

利用Java的HashMap,键值对形式保存添加该数值。

HashMap的put方法可以添加元素,例如下面的代码:

// 引入 HashMap 类      
import java.util.HashMap;

public class RunoobTest {
    public static void main(String[] args) {
        // 创建 HashMap 对象 Sites
        HashMap<Integer, String> Sites = new HashMap<Integer, String>();
        // 添加键值对
        Sites.put(1, "Google");
        Sites.put(2, "Runoob");
        Sites.put(3, "Taobao");
        Sites.put(4, "Zhihu");
        System.out.println(Sites);
    }
}

HashMap是一个散列表,存储的内容就是键值对(key-value)映射。

其次:find可以通过遍历map,利用HashMap的API的getOrDefault() 方法,该方法可以获取指定key对应的value,如果找不到key,则返回默认的默认数值containsKey该方法就是审查map中是否存在指定key对应的映射关系,如下示例代码:

import java.util.HashMap;

class Main {
    public static void main(String[] args) {
        // 创建一个 HashMap
        HashMap<Integer, String> sites = new HashMap<>();

        // 往 HashMap 添加一些元素
        sites.put(1, "Google");
        sites.put(2, "Runoob");
        sites.put(3, "Taobao");
        System.out.println("sites HashMap: " + sites);

        //检查 key 为 1 是否存在
        if(sites.containsKey(1)) {
            System.out.println("key 为 1 存在于 sites 中");
        }

    }
}

3、题解代码——Java版本

public class TwoSum {
    HashMap<Integer, Integer> map;

    public TwoSum() {
 		// 构造方法实例化
        map = new HashMap<>();
    }

    /**
     * @param number: An integer
     * @return: nothing
     */
    public void add(int number) {
        // write your code here
        map.put(number, map.getOrDefault(number, 0) + 1);
    }

    /**
     * @param value: An integer
     * @return: Find if there exists any pair of numbers which sum is equal to the value.
     */
    public boolean find(int value) {
        // write your code here
        // a = c + b || b = a - c 类似理解
        int diff;
        for (int num : map.keySet()) {
            diff = value - num;
            if (map.containsKey(diff)) {
                if (diff != num || map.get(diff) > 1) {
                    return true;
                }
            }
        }
        return false;
    }
}

注意:该题主要涉及Java的HashMap应用和关键API-containsKey 以及 getOrDefault两个方法。

你可能感兴趣的:(Java基础,数据结构,java,算法)