C++练习题(数组1)
一.题目:
给定一个整数数组 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)相关推荐
- java 数组练习题,Java练习题 - 数组01
第一题:需求实现 模拟大乐透号码: 一组大乐透号码由10个1-99之间的数字组成 定义方法,打印大乐透号码信息 代码实现,效果如图所示: 开发提示: 使用数组保存录入的号码 参考答案: public ...
- javaSE各阶段练习题--数组
1 复习本周内容 2.分别定义方法,求一个整数数组的最大值.最小值.平均值和所有数组元素的和(4个方法) package com.henu.five; /*** @author limengdong* ...
- python数组拼接字符串_Python练习题——数组拼接
# # 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. # # 示例 1: # 输入: [10,2] # 输出: "102" # # ...
- csharp高级练习题:凡我字谜在哪里?【难度:3级】--景越C#经典编程题库,不同难度C#练习题,适合自学C#的新手进阶训练
csharp高级练习题:凡我字谜在哪里?[难度:3级]: 什么是字谜?那么,这两个词是彼此的字谜,如果它们都包含相同的字母.例如: "阿爸"和"BAAB" == ...
- 华为OD机考——牛客10道练习题(Python版)
注意:华为od机考--牛客10道练习题(Python版)仅供学习和参考,谢谢! #练习题-数组: ''' 1.求解连续数列 已知连续正整数数列{K}=K1,K2,K3...Ki的各个数相加之和为S,i ...
- C语言笔记(小白发给自己看的)
比较数字大小 第一种: int main() {int num1;int num2;scanf("%d%d",&num1, &num2);if(num1>nu ...
- 269道各路算法考试题集锦
1 某编程大赛题(35道题,中等难度) 1.在实际的开发工作中,对于string的处理是最常见的编程任务,本题是要求程序对用户输入的string进行处理,具体要求如下: 1.每个单词的首字母变为大写. ...
- 力扣练习题(数组中数据反转)
力扣练习题(数组中数据反转) 要求:int[] arr = {12,23,34,45,56,67,78,89,90}; 变为:int[] arr = {90,89,78,67,56,45,34,23, ...
- java数组循环试题_Java学习关于循环和数组练习题整理
循环例子: while循环和do-while循环 whlie(条件语句) { 循环体 }//先进行条件语句的判断,再进行循环体 do { 循环体 }whlie (条件语句)//先执行一次循环后再进行条 ...
- c语言用一维数组求字符串,c语言一维数组练习题.doc
c语言一维数组练习题 精品文档2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES1 c语言一维数组练习题 4.1内容概述 本章主要介绍了数值数组和字符数组的 ...
最新文章
- 如何使用Python的进度条?
- 富文本编辑器ckeditor的使用
- prettier 配置参数说明
- day27 CRM delete action 嵌入CRM
- 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势(下)
- 手机访问服务器中的数据库文件,手机连接服务器数据库文件在哪里
- core Animation动画
- matlab中load seamout,matlab中的save与load函数
- JavaScript数组的声明及使用(1)
- log4j2日志xml配置——不同级别的日志分别记录在不同的文件
- Javascript - Cookie
- iphone怎么查看wifi密码_怎么查看电脑连接的wifi密码?2种方法分享给大家!
- Edge(chrome内核)浏览器Linux版本初体验
- HART/EtherNet IP网关HEI-612
- 测试计划报告---5W1H
- python股票成交明细_AkShare-股票数据-龙虎榜-机构席位成交明细
- postgresql 解锁表
- oracle 变更字段名称_oracle怎么修改字段名?
- 电动自行车,电动滑板车出口欧盟CE认证怎么办理通过
- storj主网挖矿指南
热门文章
- python画50个图-python绘制多个子图的实例
- python难学吗-我没有基础,能否学会Python?Python难吗?
- python画三维图-Python+matplotlib绘制三维图形5个精选案例
- 谷歌发布机器学习云平台 开放语音识别API
- 连续语音识别,continuous speech recognition,音标,读音,翻译,英文例句,英语词典
- 一种多功能语音识别技术和音乐播放器相结合的方法
- 随机读写工具,手写,百度云源码直接下载
- win10wifi多了数字_win10系统电脑查看wifi密码是多少的方法
- 创业冲突的五种解决方法是_当创始合伙人发生冲突时,最好的解决方法4和5
- win10如何下载python3_Win10环境中如何实现python2和python3并存