LintCode-607: Two Sum III

匿名 (未验证) 提交于 2019-12-03 00:19:01

该题用Array或HashTable都可以。
Array: add()时间复杂度O(n),find()时间复杂度O(n)。
HashTable: add()时间复杂度O(1), find()时间复杂度O(n)。

解法1:Array。add()用类似插入排序。find()用双指针。
代码:

class TwoSum { public:     /*      * @param number: An integer      * @return: nothing      */     void add(int number) {         nums.push_back(number);         int i=0, pos=0;         int len=nums.size();         //similar to insertion sort         for (i=0; i<len-1; ++i) {             if (number<=nums[i]) {                 break;             }         }         pos=i;         for (i=len-1; i>pos; --i) {             nums[i]=nums[i-1];         }         nums[pos]=number;     }      /*      * @param value: An integer      * @return: Find if there exists any pair of numbers which sum is equal to the value.      */     bool find(int value) {         int p1=0, p2=nums.size()-1;         while(p1<p2) {             int sum=nums[p1]+nums[p2];             if (sum==value) {                 return true;             } else if (sum>value) {                 p2--;             } else {                 p1++;             }        }         return false;     }      private:         vector<int> nums;      };

解法2: HashTable。下次写。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!