• [LeetCode]1.Two Sum 两数之和&&第一次刷题感想


    ---恢复内容开始---

    参考博客:

    https://www.cnblogs.com/grandyang/p/4130379.html

    https://blog.csdn.net/weixin_38715903/article/details/80483609

      为了吃饭,于是就开启了leetcode的刷题之旅。其实应该在暑假就开始的,奈何个人太懒惰了,在此进行自我的检讨。

      说回正题,leetcode和之前刷的oj的格式感觉不大一样,一开始看的时候感觉很不适应,但后来其实弄清楚门路了就还好。只要把其中的函数部分提取出来用来测试就可以了,就当一般oj使用就行。

    回归第一题:

         给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

    示例:给定 nums = [2, 7, 11, 15], target = 9,因为 nums[0] + nums[1] = 2 + 7 = 9,所以返回 [0, 1]。

        刚开始是想进行暴力搜索,但是oj的时间复杂度应该是不行的(其实这个也是别的博客说的,我等等去尝试下)。于是就想到了hashmap。其实感觉就是STL里面的map。

        具体思路:

    1.对数组所有元素形成key-value形式,key为数组值,value为下标。即map[num[0]]=0,map[num[1]]=1.

    2.对于nums数组里面的数,遍历,寻找是否存在,map[target-num[i]],这个值;不存在继续寻找

    3.若存在这么一个值map[target-num[i]],那判断这个值的下标是不是i,也就是判断target-num[i]这个值,是不是就是num[i],本身。如果是,那就不是两个数,继续寻找。如果不是,就说明存在这么两个数,返回下标,即i和map[target-num[i]]

    代码如下:

    #include "pch.h"
    #include <iostream>
    #include <iostream>
    #include<math.h>
    #include <iomanip>
    #include<cstdio>
    #include<string>
    #include<map>
    #include<vector>
    #include<list>
    #include<algorithm>
    #include<stdlib.h>
    #include<iterator>
    #include<sstream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    
    
    
    vector<int> twoSum(vector<int>& nums, int target) {
        vector<int> res;
        map<int, int> temp;
        for (int i = 0; i < nums.size(); i++)
        {
            temp[nums[i]] = i;
        }
    
        for (int i = 0; i < nums.size(); i++)
        {
            if (temp.count(target-nums[i])!=0&&temp[target-nums[i]]!=i)
            {
                res.push_back(i);
                res.push_back(temp[target - nums[i]]);
                break;
            }
        }
        return res;
    }
    
    int main()
    {
       //测试部分
        vector<int> a;
        vector<int> nums = {2,7,11,15};
        int target = 9;
        a = twoSum(nums, target);
    
        for (int i = 0; i < a.size(); i++)
        {
            cout << a[i] << endl;
        }
    
    }
  • 相关阅读:
    ny 58 最少步数 (BFS)
    Oracle 参数文件
    Oracle 密码文件
    Oracle 表空间与数据文件
    Oracle 回滚(ROLLBACK)和撤销(UNDO)
    Oracle 控制文件(CONTROLFILE)
    Oracle 联机重做日志文件(ONLINE LOG FILE)
    Oracle 常用目录结构(10g)
    Oracle 归档日志
    instance_name,db_name,oracle_sid之间的关系
  • 原文地址:https://www.cnblogs.com/William-xh/p/11319282.html
Copyright © 2020-2023  润新知