C++LeetCode每日一题 Day3 常用容器vector的使用

vetor容器是C++中常用容器,可以用来代替数组

相较数组而言,vector能够更灵活的添加插入删除数据

//添加头文件<vector>

一、vector 的初始化

(1) vector<int> a(10);

//定义了10个整型元素的向量,但没有给出初值,其值是不确定的。

(2)vector<int> a(10,1);

//定义了10个整型元素的向量,且给出每个元素的初值为1

(3)vector<int> a(b);

//用b向量来创建a向量,整体复制性赋值

(4)vector<int> a(b.begin(),b.begin+3);

//定义了a值为b中第0个到第2个(共3个)元素

(5)int b[7]={1,2,3,4,5,9,8};

vector<int> a(b,b+7);

//从数组中获得初值

二、vector对象的几个重要操作

(1)a.assign(b.begin(), b.begin()+3); //b为向量,将b的0~2个元素构成的向量赋给a

(2)a.assign(4,2); //是a只含4个元素,且每个元素为2

(3)a.back(); //返回a的最后一个元素

(4)a.front(); //返回a的第一个元素

(5)a[i]; //返回a的第i个元素,当且仅当a[i]存在2013-12-07

(6)a.clear(); //清空a中的元素

(7)a.empty(); //判断a是否为空,空则返回ture,不空则返回false

(8)a.pop_back(); //删除a向量的最后一个元素

(9)a.erase(a.begin()+1,a.begin()+3); //删除a中第1个(从第0个算起)到第2个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+ 3(不包括它)

(10)a.push_back(5); //在a的最后一个向量后插入一个元素,其值为5

(11)a.insert(a.begin()+1,5); //在a的第1个元素(从第0个算起)的位置插入数值5,如a为1,2,3,4,插入元素后为1,5,2,3,4

(12)a.insert(a.begin()+1,3,5); //在a的第1个元素(从第0个算起)的位置插入3个数,其值都为5

(13)a.insert(a.begin()+1,b+3,b+6); //b为数组,在a的第1个元素(从第0个算起)的位置插入b的第3个元素到第5个元素(不包括b+6),如b为1,2,3,4,5,9,8 ,插入元素后为1,4,5,9,2,3,4,5,9,8

(14)a.size(); //返回a中元素的个数;

三、顺序访问vector的几种方式

(1)向向量a中添加元素

1、

1 vector<int> a;

2 for(int i=0;i<10;i++)

3 a.push_back(i);

2、也可以从数组中选择元素向向量中添加

int a[6]={1,2,3,4,5,6};

vector<int> b;

for(int i=1;i<=4;i++)

b.push_back(a[i]);

3、也可以从现有向量中选择元素向向量中添加

int a[6]={1,2,3,4,5,6};

vector<int> b;

vector<int> c(a,a+4);

for(vector<int>::iterator it=c.begin();it<c.end();it++)

b.push_back(*it);

4、也可以从文件中读取元素向向量中添加

ifstream in("data.txt");

vector<int> a;

for(int i; in>>i)

a.push_back(i);

5、【误区】

vector<int> a;

for(int i=0;i<10;i++)

a[i]=i;

//这种做法以及类似的做法都是错误的。刚开始我也犯过这种错误,后来发现,下标只能用于获取已存在的元素,而现在的a[i]还是空的对象

题目:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

思路:

//第一种方法:

//两层循环,逐个遍历 找出差最大的

//第二种:

//找最大和最小,是否满足大的在前面小的在后面,不满足 两个分支1保最大2保最小 最后比较哪个差更大

不行! 必须兼顾

我的题解:

#include<iostream>

#include<vector>

#include<string.h>

using namespace std;

class Solution{

public:

int max(vector<int> price){

int i = 0 , j = 0 , max = 0 ;

for( ; i < price.size()-1 ; i++){

for( j = i+1 ; j < price.size() ; j++){

if(price[j] - price[i] > max)

max = price[j] - price[i] ;

}

}

return max;

}

};

int main(){

int p[6] = {7,1,5,3,6,4};

vector<int> price(p,p+6);

Solution s;

cout<<s.max(price);

}

其他巧解方法 :

class Solution {

public:

int maxProfit(vector<int>& prices) {

int inf = 1e9; //无穷大数

int minprice = inf, maxprofit = 0;

for (int price: prices) {

//与每一个价格之前的最小值做差,再与最大差比较

maxprofit = max(maxprofit, price - minprice);

minprice = min(price, minprice);

}

return maxprofit;

}

};

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值