两数之和问题

由于Leetcode上关于C++只有接口函数,而自己水平又实在不行,就当做一步一步理解吧
如题:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9

所以返回 [0, 1]

附上代码:

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <sstream>using std::vector;
using namespace std;
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> a(2,0);for(int i = 0; i<nums.size()-1; i++){for(int j=i+1; j < nums.size(); j++)if(nums[j] == target-nums[i] ){a[0]=i;a[1]=j;}}return a;}
};void trimLeftTrailingSpaces(string &input) {input.erase(input.begin(), find_if(input.begin(), input.end(), [](int ch) {return !isspace(ch);}));
}void trimRightTrailingSpaces(string &input) {input.erase(find_if(input.rbegin(), input.rend(), [](int ch) {return !isspace(ch);}).base(), input.end());
}vector<int> stringToIntegerVector(string input) {vector<int> output;trimLeftTrailingSpaces(input);trimRightTrailingSpaces(input);input = input.substr(1, input.length() - 2);stringstream ss;ss.str(input);string item;char delim = ',';while (getline(ss, item, delim)) {output.push_back(stoi(item));}return output;
}int stringToInteger(string input) {return stoi(input);
}string integerVectorToString(vector<int> list, int length = -1) {if (length == -1) {length = list.size();}if (length == 0) {return "[]";}string result;for(int index = 0; index < length; index++) {int number = list[index];result += to_string(number) + ", ";}return "[" + result.substr(0, result.length() - 2) + "]";
}int main() {string line;while (getline(cin, line)) {vector<int> nums = stringToIntegerVector(line); //输入第一行字符串转换成整型getline(cin, line);int target = stringToInteger(line);vector<int> ret = Solution().twoSum(nums, target);string out = integerVectorToString(ret);cout << out << endl;}return 0;
}

既然一步一步分析,就开始从main()函数了解,首先声明了一个字符串常量line,用来接收输入信息;遇到了第一个不熟悉的。

  1. getline(cin, line)

  2. stringToIntegerVector(line)
    -----> trimLeftTrailingSpaces(input)
    ----------> input.erase();
    --------------->find_if(input.begin(), input.end(), [](int ch) { return !isspace(ch);
    -----> input.substr(1, input.length() - 2)

  3. Solution().twoSum(nums, target);

  4. integerVectorToString(ret);
    1.getline(cin, line)
    getline作为gcc的扩展定义,它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
    应用范围:用于读取一行字符直到换行符,不读取换行符;
    其他用法可参考:C++中的getline()
    2. stringToIntegerVector(line)
    程序随之进入stringToIntegerVector(line) ;又遇到自己没见过的函数 input.erase();这里主要提一下erase();需要详细了解可参考–STL中erase()的用法;
    简而言之:erase函数是用来操作string的,函数原型如下:
    (1)有两个参数,且参数类型都是size_t型:string& erase ( size_t pos = 0, size_t n = npos );功能是:删除容器中从pos位置开始的n个元素。返回值是经过删除操作后的容器。
    (2)有一个参数,且参数类型为iterator:iterator erase ( iterator position );功能是:删除容器中position所指位置的元素。返回值是指向被删元素之后的那个元素(即下一个元素)的迭代器。
    (3)有两个参数,且参数类型都是iterator:iterator erase ( iterator first, iterator last );功能是:删除容器中first到last之间的所有元素(左闭右开),但不包括last所指的元素。(即删除fist~last -1所指的元素)返回值是一个迭代器,该迭代器指向last所指得的元素,可以理解为返回的就是last。

    紧接着find_if()函数又挡在门前,感觉自己白学了那么多年,只会百度代码。C++ STL算法系列2;
    find_if :在序列中找符合某谓词的第一个元素。
    find_if算法 是find的一个谓词判断版本,它利用返回布尔值的谓词判断pred,检查迭代器区间[first, last)上的每一个元素,如果迭代器iter满足pred(*iter) == true,表示找到元素并返回迭代器值iter;未找到元素,则返回last。
    所以trimLeftTrailingSpaces(input);这个函数我理解为了保证读取的输入左侧不为空。
    继续往下走,有认识了一个函数String.substr( );其作用是抽去一个子串,但是它和String.substring( )有所不同用法如下:string.substr(start, length)
    start:指代截取子串开始下标
    length:截取子串的长度(可省略)
    详细用法参考了截取字符串substring与substr之间的区别;
    接下来的代码就慢慢地能看懂了;为了取出输入的数字,分离出输入的“,”;而后将其转化为整型存放至动态数组,而后返回;这里还有一个函数stoi(item) ;其意思是解析str的文本转化为为int整数。函数模板为:

int stoi (const string& str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);

idx如果不为空,则会返回一个字符串中遇到的第一个字符(非数字)的字符下标,最后一个base是默认10进制。具体参考c++的atoi和stoi一些区别。
此时已经将输入的第一行转化为动态数组存放至nums;接着读取第二行,和第一步相似;
3.Solution().twoSum(nums, target)
显然这里就是需要写我们自己的函数了;这里不做过多的解释;
4.integerVectorToString(ret)
由于返回的数组类型,这里先转化成string类型,再做输出操作;
这里的程序也比较熟悉,就不一一赘述了;就这样吧,菜菜的自我梳理。

自己当笔记写着玩吧--leetcode- 001相关推荐

  1. Jmeter使用基础笔记-写一个http请求

    前言 本篇文章主要讲述2个部分: 搭建一个简单的测试环境 用Jmeter发送一个简单的http请求 搭建测试环境 编写flask代码(我参考了开源项目HttpRunner的测试服务器),将如下的代码保 ...

  2. 比Word更优雅的记笔记/写文档/交报告方式

    比Word更优雅的记笔记/写文档/交报告方式 markdown+vscode->pdf 背景 最近在上的一门<信息系统开发工具>课老师要求实验以后都要交实验报告,但是和以往不同的是, ...

  3. (写着玩)Python仿网络游戏《炉石传说》,继上次部分代码展示

    上一期: (写着玩)Python仿网络游戏<炉石传说>,使用LOL的卡牌进行模拟对局(版本1.0)_AMarvelZ的博客-CSDN博客

  4. [废弃]想写一个玩魔方的游戏

    有一个idea, 想写一个玩魔方的游戏. P.S: 不过,根据本人的执行力,不知道啥时候可以写出来.盖个戳先吧. 注:想了一下,觉得不好玩.废弃之. 转载于:https://www.cnblogs.c ...

  5. 微信商城开发系列第四篇 不写代码玩转微信公众号

    本系列文章转载自:CSDN博客walkingmanc的专栏 为什么叫不写代码玩转微信公众号呢? 我们大家都知道,微信公众号有两种模式,一种是编辑模式,一种是开发模式.所谓的不写代码玩转微信公众号,其实 ...

  6. 【JS】WTool.js 基于JQuery的工具集 (写着玩的)

    [JS]WTool.js  基于JQuery的工具集 (写着玩的) // console.info("加载WTool中...")/*** 威工具1.基于Jquery开发2.参考VU ...

  7. python写机器人玩僵尸骰子

    python写机器人玩僵尸骰子 由Al Sweigart用python发布 注意:我正在为我的僵尸骰子模拟器寻找反馈,以及这一套指令.如果你觉得有什么地方可以改进,请发邮件到al@inventwith ...

  8. 读书笔记—写给大家看的PPT设计书

    作者:[美]Robin Williams 第一部分 写在设计之前 在现实生活中你可以表现得不可思议地愚蠢,你的话可以让人听得毫无兴致,昏昏欲睡,但是在这个演讲的舞台上,你却是一个明星!同时你还承担着让 ...

  9. python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...

    温馨提示:微信已经开始检测分数异常高的情况了,请大家不要跑太高哦 游戏模式 这是一个 2.5D 插画风格的益智游戏,玩家可以通过按压屏幕时间的长短来控制这个「小人」跳跃的距离.可能刚开始上手的时候,因 ...

最新文章

  1. 【gitlab】gitlab快速部署教程
  2. Java源码:java.lang.reflect反射之AccessibleObject、ReflectionFactory、Filed、Method、Constructor类
  3. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第24篇]描述一个二进制m组的滑动窗口指数算法
  4. 计算机网络实用期末试题和答案,计算机网络期末考试试题及答案(1)
  5. bellman ford java_Java C 实现Bellman-ford算法
  6. 低代码,是否能“取代”开发者?
  7. 《托马斯大学微积分》习题1.4——31
  8. android 音乐均衡器,App+1 | 不懂均衡器调校也能量身定制,无需折腾的 Android 音效提升工具...
  9. 5053服务器未响应,5053,控制器未响应
  10. 重点来了,具有优质脂肪的坚果居然是减肥的好帮手!
  11. 航空工装的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 数据中台架构体系理解
  13. 指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)
  14. python 数据透视表_使用Python数据透视表探索幸福数据
  15. 一个正经的前端学习 开源 仓库(阶段十七-440)
  16. linux 查看python路径
  17. [已解决]解决小米云下载JPG格式微博照片格式无法打开问题
  18. drupal mysql配置_安装配置Apache+php+mysql+drupal
  19. 大数据第一天 Hadoop01-入门集群环境搭建
  20. JavaScript.BOM

热门文章

  1. STL初步——集合Set
  2. 让POW的共识机制不再成为公链系统吞吐率的瓶颈 | Conflux CTO伍鸣
  3. csp模拟题-炉石传说
  4. vue动态加载在线字体,及渲染
  5. 《如何写好科研论文》
  6. 柿饼UI入门课程第一周作业
  7. Java实现屏幕截屏
  8. android系统自带system/app下载,Android 把应用APK安装包放到system/app下的方法
  9. 随手查_python
  10. 视频摘要和视频浓缩的区别