zoukankan      html  css  js  c++  java
  • leetcode Two Sum

    PS:下面贴的这个代码是二分查找的那个,不是那个用map的我再写一遍吧。

    map代码:

    #include<map>
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    vector<int> TwoSum(vector<int> numbers, int target)
    {
        vector<int> result;
        map<int, int> hmap;
        for (int i = 0; i < numbers.size(); i++)
        {
            int x = target - numbers[i];
            if (hmap.count(x) == 0)
            {
                hmap.insert(pair<int, int>(numbers[i], i));
            }
            else
            {
                int j = hmap[x];
                result.push_back(j + 1);
                result.push_back(i + 1);
                return result;
            }
        }
        return result;
    }
    
    int main()
    {
        vector<int> a = { 2, 7, 13, 4 };
        vector<int> b = TwoSum(a, 9);
        for (int i = 0; i < 2; i++)
        {
            cout << b[i] << "    ";
        }
    }

    PS: STL真的很好用啊!!!!

    本来这个题呢,是O(n2)但是试了一下,没过,这个在预期内!!然后想到了,查找target-a[i]这种方法,排序要O(nlgn),后来仔细一想,我还要保存排序前的的数组下表,而且这好像也不像算法OJ的考察方式吧。然后找了下答案,最后发现其实和我保存的方式差不多,只不过,别人利用map把search target-a[i] 的时间降到了O(1)时间,这就是用stl的好处。

    二分查找代码:

     1 class Solution {
     2 public:
     3     vector<int> twoSum(vector<int> &numbers, int target) {
     4         sort(numbers.begin(),numbers.end());
     5     int size = numbers.size();
     6     vector<int> result;
     7     for (int i = 0; i < size; i++)
     8     {
     9         int t = target - numbers[i];
    10         int p = i + 1; 
    11         int r = size - 1;
    12         int q = (p+r) / 2;
    13         int j = i;
    14         while (p <= r)
    15         {
    16             if (numbers[q] == t)
    17             {
    18                 j = q;
    19                 break;
    20             }
    21             if (t<numbers[q])
    22             {
    23                 r = q - 1;
    24                 q = (p + r) / 2;
    25             }
    26             else
    27             {
    28                 p = q + 1;
    29                 q = (p + r) / 2;
    30             }
    31         }
    32         if (j > i)
    33         {
    34             result.push_back(i + 1);
    35             result.push_back(j + 1);
    36             return result;
    37         }
    38     }
    39     return result;
    40     }
    41 };
  • 相关阅读:
    脱发
    jquery radio 选择值
    今天看了非诚勿扰记忆哥,觉得人和人还是差的是能力
    如果要在数组中删除东西还是用倒序的数是正确的
    jquery操作 xml
    偶然在一个帖子上看到的
    jquery 队列的应用
    阅读
    Request的getParameter和getAttribute方法的区别
    jsp与jspx文件
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4313836.html
Copyright © 2011-2022 走看看