数组
c++中的STL中的vector
(STL中的vector每次扩容量时,新的容量都是之前一次的两倍)
在c/c++中,数组和指针是相互关联又有区别的两个概念。
关联:当我们声明一个数组时,其数组的名字也是一个指针,该指针指向数组的第一个元素。我们可以用一个指针来访问数组。
#include<iostream>
using namespace std;
int GetSize(int data[])
{return sizeof(data);
}
int main()
{int data1[]={1,2,3,4,5};int size1=sizeof(data1);int *data2=data1;int size2=sizeof(data2);int size3=GetSize(data1);cout<<size1<<","<<size2<<","<<size3<<endl;system("pause");
}
这里是因为作者的编辑环境是在win64,vscode编译器下。
data1是一个数组,sizeof(data1)是求数组的大小int类型的常量是占四个字节的,5*4=20;
data2声明为指针,尽管它指向了数组的第一个数字,但他的本质任然是一个指针,在64位操作系统上,对任意指针求sizeof,得到的结果都是8;
在c/c++中,当数组作为函数的参数进行传递时,数组就自动转换为同类型的指针。因此,尽管函数GetSize的参数data被声明为数组,但他会退化为指针,size3的结果为8;
题目1:找出数组中的重复的数字
在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
例如:如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。
思路:
暴力的解法
1.排序 时间复杂度O(nlogn);
2.哈希表 空间复杂度O(n);
更好的解决方法: