Leetcode学习笔记Day1——第1题以及vector和map

新的一年开始了

代码练习也要开始了

目录

1. 万能的for循环

2. 进阶:时间复杂度小于O(n^2)

3.知识点

(1)vector (一种顺序容器)

(2)map(一种关联容器)


1. 万能的for循环

时间复杂度O(n^2)

代码如下:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        int a,b;
        for(a=0;a<nums.size()-1;a++)
        {
            for(b=a+1;b<nums.size();b++){
                if(nums[a]+nums[b]==target)
                    return{a,b};
                else
                    continue;
            }
        }
        return{a,b};

    }
};

2. 进阶:时间复杂度小于O(n^2)

Leetcode提示用Hash,时间复杂度O(n)。

(还想到了用指针,不过想复习一下map,有没有大神用指针写的求分享。)

将数组中的值当作键值对中的key,将数组的角标当作value,遍历数组。

target-nums[a],查找数组中是否有这个差,这时数组的值是map的key,如果有,就找到key所对应的value,也就是数组的角标。

代码如下:

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        map<int,int> TSum;//将数组的值作为key,角标作为value
        vector<int> vec;//定义一个容器存放返回的角标
        int a=0;
        int b=0;
        for(a=0;a<nums.size();a++){
            if(TSum.find(target-nums[a])!=TSum.end()){
                //数组中是否有target与nums[a]的差
                b=TSum.find(target-nums[a])->second;
                //second表示value,意思就是差在数组中的角标。
                vec.push_back(b);
                //差所对应的角标放进容器。
                vec.push_back(a);
                //此时数组的角标放进容器
            }
            TSum.insert({nums[a],a});
        }
        
        return vec;
    }
};

3.知识点

(1)vector (一种顺序容器)

 存放任意类型的动态数组。

 push_back函数在vector的末尾插入一个数据。

(2)map(一种关联容器)

 map中有一对Key,Value键值对。

 迭代器find函数中的参数是key,find()->first是key的值,find()->second是value的值。

 如果没有相应的key,就指向end()。

每天都要开开心心呀!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值