码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode解题记录

时间:2020-03-27 12:43:36      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:下标   span   default   技术   题记   测试   count   func   利用   

1.两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
 
解:
 1 class Solution {
 2 public:
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         int start=0;
 5         int next=1;
 6         vector<int> results;
 7         while(start<nums.size()){
 8             if(nums.at(start)>target){
 9                 start++;
10             }
11             else{
12                 int submit=target-nums.at(start);
13                 while(next<(nums.size()-start)){
14                     if(nums.at(start+next)!=submit){
15                         next++;
16                     }
17                     else{
18                         results.push_back(start);
19                         results.push_back(start+next);
20                         return results;
21                     }
22                 }
23             }
24         }
25         return results;
26     }
27 };

在得到最后的结果前遇到两个编译错误:Reference to non-static member function be called和control may reach end of non-void function。

第一个检查一下调用的类的函数名有没有写正确,我把nums.size()写成nums.size。所以编译出错。

第二个是跟返回类型不匹配相关的。

 

代码提交之后只通过了一个测试案例,检查之后在23行新增 start++;再次提交通过23个案例!

输入: [-1,-2,-3,-4,-5]
-8
输出: []
预期: [2,4]
关键问题出在第8行的判据:nums.at(start)>target。对于负数来说总是为真,所以输出为空!
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> results;
        int start=0;
        while(start<nums.size()){
            for(int next=1;next<(nums.size()-start);next++){
                if(nums.at(start)+nums.at(start+next)==target){
                    results.push_back(start);
                    results.push_back(start+next);
                    return results;
                }
            }
            start++;
        }
        return results;
    }
};

技术图片

结果的耗时太长!!!

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> results;
        map<int,int> mymap;
        for(int i=0;i<nums.size();i++){
            mymap[nums[i]]=i;
        }
        for(int i=0;i<nums.size();i++){
            int submit=target-nums.at(i);
            if(mymap.count(submit)&&mymap[submit]!=i){
                results.push_back(i);
                results.push_back(mymap[submit]);
                return results;
            }
        }
        return results;
    }
};

使用map类之后:

技术图片

 

Leetcode解题记录

标签:下标   span   default   技术   题记   测试   count   func   利用   

原文地址:https://www.cnblogs.com/gangyin/p/12579804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!