【LeetCode】1.Two Sum思路以及知识点复习

来源:互联网 发布:乐高ev3机器人编程软件 编辑:程序博客网 时间:2024/05/22 15:41

1. Two Sum

Given an array of integers, return indices ofthe two numbers such that they add up to a specific target.

You may assume that each input would have exactly onesolution, and you may not use the same element twice.

Example:

Givennums = [2, 7, 11, 15], target = 9,

 

Becausenums[0] + nums[1] = 2 + 7 = 9,

return[0, 1].

//从一个数中找出两个数字,使得的两个数字的和等于target

class Solution {

public:

vector<int>twoSum(vector<int>& nums, int target) {

//定义了函数twosum类型,所以return应该是一个vector数组!!!

       vector<int>res;

     //声明一个res储存索要输出的内容    

       int len=nums.size();

//vector类型获取长度用size()

       map<int,int>m;

//定义一个hash表,用来建立数值与下标的索引,其中key为数值,velue为下标

target=nums[j]+nums[i]

nums[j]=target-nums[i]

即在向map中插入元素的时候,边插入边判断前面的主键是否有target-nums[i],如果有,将这两个的下标插入到m中,最后输出!

//动态的判断,时间复杂度小于O(n)

       for(int i=0;i<len;i++){

           if(m.count(target-nums[i])){

                res.push_back(i);

               res.push_back(m[target-nums[i]]);

                return res;

           }

           m[nums[i]]=i;

       }

       return res;

    }

};

//知识补充:c++中的STL复习

1.    vector动态数组  #include<vector>

声明:vector<数据类型>name;

在数组最后添加元素:name.push_back(元素值)

删除数组最后的元素:name.pop_back()

得到编号位置的数据 at()

获取数组大小size()

清空数组clear()

max_szie() 获取数组最大可以是多大

empty()判断数组是否为空

2.    map类型 #include<map>

定义:map<key,velue>name;

插入数据:

  (1)  my_Map["a"] = 1;

  (2)  my_Map.insert(map<string, int>::value_type("b",2));

  (3)  my_Map.insert(pair<string,int>("c",3));

  (4)  my_Map.insert(make_pair<string,int>("d",4));

查找数据:MY_MAP::iteratormy_Itr;//定义迭代器

            my_Itr.find("b"); //查找key的值为b的数据,并将my_ltr指向该位置!

int  j  =   my_Itr->second;

获取这个元素的值

my_Itr->second= j;//修改元素值

       

         删除元素my_Map.erase(迭代器或者key);

        count() 返回指定元素出现的次数

        empty() 如果map为空则返回true

         end() 返回指向map末尾的迭代器

        equal_range() 返回特殊条目的迭代器对

        erase()删除一个元素

         find() 查找一个元素

         get_allocator() 返回map的配置器

         insert() 插入元素

         key_comp() 返回比较元素key的函数

         lower_bound() 返回键值>=给定元素的第一个位置

         max_size() 返回可以容纳的最大元素个数

         rbegin() 返回一个指向map尾部的逆向迭代器

         rend() 返回一个指向map头部的逆向迭代器

         size() 返回map中元素的个数

         swap() 交换两个map

         upper_bound() 返回键值>给定元素的第一个位置

         value_comp() 返回比较元素value的函数

3.    set类型 集合,元素各不相同!mutiset支持相同元素

4.    list列表   和vector类似,unique()删除重复元素

5.    stack栈   后进先出的容器

声明过程同上

插入元素push()

删除元素pop()//出栈只是删除这个元素,而不访问这个元素

访问栈顶元素top()

判断是否为空empty()

返回栈的大小size()

6.    queue队列   后进先出

入队push()

出队pop()

访问对尾元素back()

访问队头元素front()

判断队列是否为空empty()

7.    迭代器  iterator

每种容器都有自己的迭代器,声明方法:

vector<int>::iteratoriter;

使用迭代器对动态数组进行遍历:

for(iter=v.begin();iter!=v.end();iter++){

   cout<<*iter;

}//iter只能够读取元素而不能够修改元素!

Distance()函数能够计算迭代器与开头的位置


原创粉丝点击