zoukankan      html  css  js  c++  java
  • 170. Two Sum III

    最后更新

    二刷。。

    其实没那么简单。。。

    可以维持2个set,一个是所有的elements,一个存放可组合的所有sum,每次add的时候更新2个set,这样find是O(1),然而TLE了。。

    另一个做法是添加直接加,然后查的时候看看能不能组合出来所需要的值。

    edge case着实难想到= = add(0) find(0)是false。。
    一个元素似乎只能用一次。。

    public class TwoSum {
    
        Map<Integer, Integer> map = new HashMap<>();
    
        // Add the number to an internal data structure.
    	public void add(int number) {
    	    map.put(number, map.getOrDefault(number, 0) + 1);
    	}
    
        // Find if there exists any pair of numbers which sum is equal to the value.
    	public boolean find(int value) {
    	    Iterator<Integer> iter = map.keySet().iterator();
    	    while (iter.hasNext()) {
                int temp = iter.next();
                if (map.containsKey(value - temp)) {
                    if (value - temp != temp || map.get(value - temp) > 1) {
                        return true;
                    }
                }
    	    }
    	    return false;
    	}
    }
    

    还不如一刷做得好。。
    不用记录每个元素有几个,记录是不是多余1个就行了,像一刷那样。


    一刷

    主要是add2 add2 find4这种重复的情况需要注意。。

    public class TwoSum {
    
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    
        // Add the number to an internal data structure.
    	public void add(int number) 
    	{
    	    if(map.containsKey(number))
    	    {
    	        map.put(number,2);
    	    }
    	    else
    	    {
    	        map.put(number,1);
    	    }
    	    
    	}
    
        // Find if there exists any pair of numbers which sum is equal to the value.
    	public boolean find(int value) 
    	{
            for(Integer i: map.keySet())
            {
                int need = value - i;
                if(map.containsKey(need))
                {
                    if(need == i)
                    {
                        if(map.get(i) == 2) return true;
                    }
                    else
                    {
                        return true;
                    }
                    
                    
                }
            }
            
            return false;
    	}
    }
    


  • 相关阅读:
    新的页面事件的添加
    excel里数字0不显示
    VB6接口、对象比较等
    SQL SERVER服务停止和启动命令行
    如何更改VS2008的字体和大小
    如何部署windows service
    模式应用 - 利用工厂模式制作自己的"小程序测试工厂"
    解决Oracle Temp01.dbf不断变大的问题
    如何配置VS2008让它用外置IIS进行调试
    使用JQuery Autocomplete插件(一)
  • 原文地址:https://www.cnblogs.com/reboot329/p/5935744.html
Copyright © 2011-2022 走看看