美文网首页
LeetCode:ARRAY 1.TwoSum

LeetCode:ARRAY 1.TwoSum

作者: MachinePlay | 来源:发表于2019-07-17 12:23 被阅读0次

    暴力 O(n^2)

    /*
     * @lc app=leetcode.cn id=1 lang=cpp
     *
     * [1] 两数之和
     *
     * https://leetcode-cn.com/problems/two-sum/description/
     *
     * algorithms
     * Easy (46.26%)
     * Likes:    5691
     * Dislikes: 0
     * Total Accepted:    446.4K
     * Total Submissions: 964.8K
     * Testcase Example:  '[2,7,11,15]\n9'
     *
     * 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
     * 
     * 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
     * 
     * 示例:
     * 
     * 给定 nums = [2, 7, 11, 15], target = 9
     * 
     * 因为 nums[0] + nums[1] = 2 + 7 = 9
     * 所以返回 [0, 1]
     * 
     * 
     */
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            int i,j;
            vector<int> result;
            for(i=0;i<nums.size()-1;i++){
                for (j=i+1;j<nums.size();j++){
                    if(nums[i]+nums[j]==target){
                        result.push_back(i);
                        result.push_back(j);
                        return result;
                    }
                    
                }
            }
            return result;
    
    };
    };
    
    
    
    

    HashMap O(n)

    double traval

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            map<int ,int > result;
            vector b(2,-1);
            int i,j;
            for(i=0;i<nums.size();i++){
                result.insert(map<int,int>::value_type(nums[i],i));
            }
    
            for(j=0;j<nums.size();j++){
                if(result.count(target-nums[j])>0&&result[target-nums[j]]!=j){
                    b[0]=j;
                    b[1]=result[target-nums[j]];
                    break;
                }
            }
            return b;
        }
    };
    

    once traval

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            map<int ,int > result;
            vector<int> temp(2,-1);
            int i,j;
            for(i=0;i<nums.size();i++){
                if(result.count(nums[i])>0){
                    temp[0]=result[nums[i]];
                    temp[1]=i;
                    break;
                }
                
                result.insert(map<int,int>::value_type(target-nums[i],i));
    
            }
            return temp;
        }
    };
    

    相关文章

      网友评论

          本文标题:LeetCode:ARRAY 1.TwoSum

          本文链接:https://www.haomeiwen.com/subject/eboxlctx.html