LeetCode 03 Two_Sum_III___Data_structure_design

问题:

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

题意:设计和实施一个TwoSum类,它支持如下操作:增加和查找。

增加:增加成员到一个int类型的数据结构中。

查找:查找是否存在一对成员的和的值等于value。

例如:

add(1); add(3); add(5);

find(4)返回true;find(7)返回false

思路:直接照搬之前的TwoSum、TwoSum2的解法显然不行,因为要考虑到增加相同值的情况,所以要改动一下。仍然使用字典,key为number的值,value为number的个数。假如target-key==key,则判断key的value是否大于等于2,else,字典中是否有target-key的key。

代码如下:

class TwoSum
    {
        //由于后面测试了Add是否有问题,所以声明为public static
        public static Dictionary<int, int> dictionary = new Dictionary<int, int>();
        //获取所有的key,存储在集合中
        Dictionary<int, int>.KeyCollection keyCollection = dictionary.Keys;
        public void Add(int number)
        {
            if (dictionary.ContainsKey(number))
                dictionary[number] += 1;
            else
                dictionary.Add(number, 1);
        }
        public bool Find(int target)
        {
            for(int j=0;j<dictionary.Count;j++)
            {
                int temp = target - keyCollection.ElementAt(j);
                if (temp == keyCollection.ElementAt(j) && dictionary[j] >= 2)
                    return true;
                else if (dictionary.ContainsKey(temp))
                    return true;
            }
            return false;
        }
    }

Main方法:

static void Main(string[] args)
        {
            TwoSum twoSum = new TwoSum();
            twoSum.Add(1);
            twoSum.Add(3);
            twoSum.Add(1);
            twoSum.Add(5);
            //输出字典中的所有元素
            foreach(KeyValuePair<int,int> i in TwoSum.dictionary)
            {
                Console.WriteLine("{0,-5}{1,-9}", i.Key, i.Value);
            }
            Console.WriteLine("Find(4):{0},Find(7):{1}", twoSum.Find(4), twoSum.Find(7));
            Console.ReadKey();
        }
总结:做这题查了字典的API好久,因为网上没有c#的代码 委屈,所有的API都看了一两遍,思路还是比较清晰的,假如有其它解法的话欢迎和我交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值