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

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

English:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
思路先将数组内的元素排序,target=最小数+最大数,若和小于target,则用次小数替换最小数;若和大于target,说明数太大,用次大数替换最大数。

代码

#include<iostream>
using namespace std;
class Solution
{public:vector<int> twosum(vector<int>& nums,int target){vector<int>backup(nums);sort(nums.begin(),nums.end());}vector<int>::itervator i1=nums.begin(),i2=nums.end()-1;while(*i1+*i2!=target){while(*i1+*i2<target)i1++;while(*i1+*i2>target)i2--;}vector<int>res;for(unsigned int i=0;i<nums.size;i++){if(backup[i]=*i1||backup[i]=*i2)res.push_back(i);}return res;
}

二.在这里用到了vector这个函数

  • 1.介绍

(1).vector是表示可变大小数组的序列容器。

(2).就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。

(3).本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,vector并不会每次都重新分配大小。

(4).vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。

(5).因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。

  • 2.用法

(1) 头文件
#include
(2)vector声明及初始化
vector vec; //声明一个int型向量
vector vec(5); //声明一个初始大小为5的int向量
vector vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector vec(tmp); //声明并用tmp向量初始化vec向量
vector tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量
//说明:当然不包括arr[4]元素,末尾指针都是指结束元素的下一个元素,
//这个主要是为了和vec.end()指针统一。
vector vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值

  • vector基本操作

(1). 容量
向量大小: vec.size();
向量最大容量: vec.max_size();
更改向量大小: vec.resize();
向量真实大小: vec.capacity();
向量判空: vec.empty();
减少向量大小到满足元素所占存储空间的大小: vec.shrink_to_fit(); //shrink_to_fit

(2). 修改
多个元素赋值: vec.assign(); //类似于初始化时用数组进行赋值
末尾添加元素: vec.push_back();
末尾删除元素: vec.pop_back();
任意位置插入元素: vec.insert();
任意位置删除元素: vec.erase();
交换两个向量的元素: vec.swap();
清空向量元素: vec.clear();

(3)迭代器
开始指针:vec.begin();
末尾指针:vec.end(); //指向最后一个元素的下一个位置
指向常量的开始指针: vec.cbegin(); //意思就是不能通过这个指针来修改所指的内容,但还是可以通过其他方式修改的,而且指针也是可以移动的。
指向常量的末尾指针: vec.cend();

(4)元素的访问
下标访问: vec[1]; //并不会检查是否越界
at方法访问: vec.at(1); //以上两者的区别就是at会检查是否越界,是则抛出out of range异常
访问第一个元素: vec.front();
访问最后一个元素: vec.back();
返回一个指针: int* p = vec.data(); //可行的原因在于vector在内存中就是一个连续存储的数组,所以可以返回一个指针指向这个数组。这是是C++11的特性。

C++练习题(数组1)相关推荐

  1. java 数组练习题,Java练习题 - 数组01

    第一题:需求实现 模拟大乐透号码: 一组大乐透号码由10个1-99之间的数字组成 定义方法,打印大乐透号码信息 代码实现,效果如图所示: 开发提示: 使用数组保存录入的号码 参考答案: public ...

  2. javaSE各阶段练习题--数组

    1 复习本周内容 2.分别定义方法,求一个整数数组的最大值.最小值.平均值和所有数组元素的和(4个方法) package com.henu.five; /*** @author limengdong* ...

  3. python数组拼接字符串_Python练习题——数组拼接

    # # 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. # # 示例 1: # 输入: [10,2] # 输出: "102" # # ...

  4. csharp高级练习题:凡我字谜在哪里?【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练

    csharp高级练习题:凡我字谜在哪里?[难度:3级]: 什么是字谜?那么,这两个词是彼此的字谜,如果它们都包含相同的字母.例如: "阿爸"和"BAAB" == ...

  5. 华为OD机考——牛客10道练习题(Python版)

    注意:华为od机考--牛客10道练习题(Python版)仅供学习和参考,谢谢! #练习题-数组: ''' 1.求解连续数列 已知连续正整数数列{K}=K1,K2,K3...Ki的各个数相加之和为S,i ...

  6. C语言笔记(小白发给自己看的)

    比较数字大小 第一种: int main() {int num1;int num2;scanf("%d%d",&num1, &num2);if(num1>nu ...

  7. 269道各路算法考试题集锦

    1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...

  8. 力扣练习题(数组中数据反转)

    力扣练习题(数组中数据反转) 要求:int[] arr = {12,23,34,45,56,67,78,89,90}; 变为:int[] arr = {90,89,78,67,56,45,34,23, ...

  9. java数组循环试题_Java学习关于循环和数组练习题整理

    循环例子: while循环和do-while循环 whlie(条件语句) { 循环体 }//先进行条件语句的判断,再进行循环体 do { 循环体 }whlie (条件语句)//先执行一次循环后再进行条 ...

  10. c语言用一维数组求字符串,c语言一维数组练习题.doc

    c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...

最新文章

  1. 如何使用Python的进度条?
  2. 富文本编辑器ckeditor的使用
  3. prettier 配置参数说明
  4. day27 CRM delete action 嵌入CRM
  5. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)
  6. 手机访问服务器中的数据库文件,手机连接服务器数据库文件在哪里
  7. core Animation动画
  8. matlab中load seamout,matlab中的save与load函数
  9. JavaScript数组的声明及使用(1)
  10. log4j2日志xml配置——不同级别的日志分别记录在不同的文件
  11. Javascript - Cookie
  12. iphone怎么查看wifi密码_怎么查看电脑连接的wifi密码?2种方法分享给大家!
  13. Edge(chrome内核)浏览器Linux版本初体验
  14. HART/EtherNet IP网关HEI-612
  15. 测试计划报告---5W1H
  16. python股票成交明细_AkShare-股票数据-龙虎榜-机构席位成交明细
  17. postgresql 解锁表
  18. oracle 变更字段名称_oracle怎么修改字段名?
  19. 电动自行车,电动滑板车出口欧盟CE认证怎么办理通过
  20. storj主网挖矿指南

热门文章

  1. python画50个图-python绘制多个子图的实例
  2. python难学吗-我没有基础,能否学会Python?Python难吗?
  3. python画三维图-Python+matplotlib绘制三维图形5个精选案例
  4. 谷歌发布机器学习云平台 开放语音识别API
  5. 连续语音识别,continuous speech recognition,音标,读音,翻译,英文例句,英语词典
  6. 一种多功能语音识别技术和音乐播放器相结合的方法
  7. 随机读写工具,手写,百度云源码直接下载
  8. win10wifi多了数字_win10系统电脑查看wifi密码是多少的方法
  9. 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
  10. win10如何下载python3_Win10环境中如何实现python2和python3并存