zoukankan      html  css  js  c++  java
  • 1. Two Sum

    解法一: 两重循环, 找到这两个加和为target的数

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
        	
        	for(int i = 0; i < nums.size(); ++ i) {
        		for(int j = i + 1; j < nums.size(); ++ j) {
        			if(nums[i] + nums[j] == target) {
        				return {i, j};
    				}
    			}
    		}
        }
    };
    
    void print(const vector<int>& v)
    {
    	for(int e : v)
    		cout << e << " ";
    	cout << endl;
    }
    
    int main()
    {
    	const int a[] = {2,7,11,15};
    	vector<int> v(a, a + sizeof(a)/sizeof(int));
    	
    	int target = 9;
    	
    	print(Solution().twoSum(v, target));
    	
    	return 0;
    }
    

      

    解法二: 先将数组中所有的数存放到hashmap中, 再遍历该数组, 判断target-当前的数字nums[i]是否已在hashmap中, 若存在, 并且索引值不同, 则返回, 否则, 继续循环

    #include <iostream>
    #include <vector>
    #include <unordered_map>
    
    using namespace std;
    
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
        	
        	unordered_map<int, int> record;
        	for(int i = 0; i < nums.size(); ++ i) {
        		record[nums[i]] = i;
    		}
    		
    		for(int i = 0; i < nums.size(); ++ i) {
    			
    			int complement = target - nums[i];
    			unordered_map<int, int>::iterator it = record.find(complement);
    			if(it != record.end() && it->second != i)
    				return {i, it->second};
    		}
    		
        }
    };
    
    void print(const vector<int>& v)
    {
    	for(int e : v)
    		cout << e << " ";
    	cout << endl;
    }
    
    int main()
    {
    	const int a[] = {1,2,42,42,7,65};
    	vector<int> v(a, a + sizeof(a)/sizeof(int));
    	
    	int target = 84;
    	
    	print(Solution().twoSum(v, target));
    	
    	return 0;
    }
    

      

    解法三: 判断当前的(target - nums[i])是否在nums[i]之前的数中存在, 若存在则返回, 若不存在, 则将该数存放到hashmap中
    #include <iostream>
    #include <vector>
    #include <exception>
    #include <unordered_map>
    
    using namespace std;
    
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
    
    		unordered_map<int, int> record;
    		for(int i = 0; i < nums.size(); ++ i) {
    			
    			int complement = target - nums[i];
    			if(record.find(complement) != record.end()) {
    				
    				int res[] = {i, record[complement]};
    				return vector<int>(res, res + 2);
    			} 
    			else {
    				record[nums[i]] = i;
    			}
    		}
    		
        }
    };
    
    void print(const vector<int>& v)
    {
    	for(int e : v) 
    		cout << e << " "; 
    	cout << endl;
    }
    
    int main()
    {
    	const int a[] = {2,7,11,15};
    	vector<int> nums(a, a + sizeof(a)/sizeof(int));
    	
    	int target = 9;
    	
    	print(Solution().twoSum(nums, target));
    	
    	return 0;
    }
    

      

  • 相关阅读:
    Java集合一
    集合类视图
    NIO
    IO补充
    线程图
    线程池
    Callable
    element-ui upload组件上传图片时限制图片宽高
    vue-router 使用a链接跳转至二级子页面偶尔会出现地址栏看不见路由和参数的情况
    vue中引入jquery报错问题
  • 原文地址:https://www.cnblogs.com/mjn1/p/11150817.html
Copyright © 2011-2022 走看看