leetcode第一天 两数之和

空间复杂度的定义:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
方法一:暴力法

 `class Solution {
    public:
        vector twoSum(vector& nums, int target) {
            vectornums_cpy;  //定义向量
            nums_cpy.assign(nums.begin(),nums.end()); 
            std:sort(nums_cpy.begin(),nums_cpy.end());   //排序
            
            auto lo = nums_cpy.begin();  
            auto hi = nums_cpy.end()-1;
            vectorresult;
            while(lo<=hi){
                if(*lo+*hi==target){
                    for(int i=0;i

`
vector 用法:
https://www.cnblogs.com/zsq1993/p/5929806.html
https://www.cnblogs.com/aminxu/p/4686332.html
auto 用法:
https://www.cnblogs.com/QG-whz/p/4951177.html
方法二:两遍哈希表
以空间换取速度

  • 时间复杂度:O(n), 我们把包含有 n个元素的列表遍历两次。由于哈希表将查找时间缩短到 O(1) ,所以时间复杂度为 O(n)。

  • 空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表中存储了 n 个元素。

方法三:一遍哈希表
事实证明,我们可以一次完成。在进行迭代并将元素插入到表中的同时,我们还会回过头来检查表中是否已经存在当前元素所对应的目标元素。如果它存在,那我们已经找到了对应解,并立即将其返回。

  • 时间复杂度:O(n), 我们只遍历了包含有 n个元素的列表一次。在表中进行的每次查找只花费 O(1) 的时间。
  • 空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。
    vector twoSum(vector &numbers, int target)
    {
        //Key is the number and value is its index in the vector.
    	unordered_map hash;
    	vector result;
    	for (int i = 0; i < numbers.size(); i++) {
    		int numberToFind = target - numbers[i];
                //if numberToFind is found in map, return them
    		if (hash.find(numberToFind) != hash.end()) {
                        //+1 because indices are NOT zero based
    			result.push_back(hash[numberToFind] + 1);
    			result.push_back(i + 1);			
    			return result;
    		}
                //number was not found. Put it in the map.
    		hash[numbers[i]] = i;
    	}
    	return result;
    }

map 用法:
http://www.cplusplus.com/reference/map/map/

你可能感兴趣的:(leetcode)