热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Leetcode:TwoSumIII-Datastructuredesign

DesignandimplementaTwoSumclass.Itshouldsupportthefollowingoperations:addandfind.a
Design and implement a TwoSum class. It should support the following operations: add and find.

add - Add the number to an internal data structure.
find - Find if there exists any pair of numbers which sum is equal to the value.

For example,
add(1); add(3); add(5);
find(4) -> true
find(7) -> false

The trade off should be considered: In fact, there has to be one operation's time complexity is O(n) and the other is O(1), no matter add or find. So clearly there's trade off when solve this problem, prefer quick find or quick add.

if there are more find, add can be pre-done

 1 public class TwoSum {
 2         Set sum;
 3         Set num;
 4         
 5         TwoSum(){
 6             sum = new HashSet();
 7             num = new HashSet();
 8         }
 9         // Add the number to an internal data structure.
10         public void add(int number) {
11             if(num.contains(number)){
12                 sum.add(number * 2);
13             }else{
14                 Iterator iter = num.iterator();
15                 while(iter.hasNext()){
16                     sum.add(iter.next() + number);
17                 }
18                 num.add(number);
19             }
20         }
21     
22         // Find if there exists any pair of numbers which sum is equal to the value.
23         public boolean find(int value) {
24             return sum.contains(value);
25         }
26     }

 

 more add:

 1 public class TwoSum {
 2     HashMap map;
 3     public TwoSum() {
 4         map = new HashMap();
 5     }
 6     
 7     public void add(int x) {
 8         if (map.containsKey(x)) {
 9             map.put(x, map.get(x)+1);
10         }
11         else {
12             map.put(x, 1);
13         }
14     }
15     
16     public boolean find(int target) {
17         for (int i : map.keySet()) {
18             if (map.containsKey(target-i)) {
19                 if (target - i != i) return true;
20                 else if (map.get(i) >= 2) return true;
21             }
22         }
23         return false;
24     }
25 }

注意17行的map.KeySet() return是一个Set形式的key的集合,Set是Collection的Subinterface, 所以这种for循环方法对Set也适用。而且即使key理论上是Integer, for循环前面的元素还是可以写成int:for(int i : map.keySet())


推荐阅读
author-avatar
轩楼妈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有