No.1
以前写过
Leetcode 原题 Best time to sell stock
但是输入输出要自己写,然后很蠢的是数字用逗号隔开的,要处理
代码(逗号分割数字)——1
string读入,然后逗号变成空格, 变成stringstream 流,转成字符串,太复杂了
int main()
{
string strTemp;
//int array[4];
//int i = 0;
vector<int> array;
stringstream sStream;
cin >> strTemp;
int pos = strTemp.find(',');
while (pos != string::npos)
{
strTemp = strTemp.replace(pos, 1, 1, ' '); //将字符串中的','用空格代替
pos = strTemp.find(',');
}
sStream << strTemp; //将字符串导入的流中
while (sStream)
{
int i_tmp ;
sStream >> i_tmp;
array.push_back(i_tmp);
}
cout<< maxProfit(array)<<endl;
}
代码(逗号分割数字)——2
输入n,n*n的数据,然后逗号分隔的,用getchar,获得无关字符
void display(int **a,int n)
{
for(int i = 0;i<n;i++)
{
for(int j = 0;j<n;j++)
cout<< a[i][j] << " ";
cout<<endl;
}
}
int main()
{
int n;
cin>>n;
int **a = new int*[n];
for(int i = 0;i<n;i++)
{
int j = 0;
a[i] = new int[n];
for(int j = 0;j<n;j++)
{
scanf("%d",&a[i][j]);
getchar();
}
}
display(a,n);
}
c++动态二维数组
java是可以直接new int [size][Column]
的
但是c++不行
因为
int size=50,Column=50;
int (*p)[Column]=new int [size][Column]这样的语句,编译器通不过,为什么呢?
首先 new int[size][Column] 就是动态生成时确定的,所以它没有错
那么就是 int(*p)[Column],这句有问题了,这句为什么不对呢, 那是因为,这是一个定义语句
,而定义语句先经过编译器进行编译,当编译器运行到此处时,发现Column 不是常数,因此不能通过编译。 而之所以编译器认为Column 不是常数,是因为编译阶段,编译器起的作用是查语法错误,和预分配空间,它并不执行程序,因此,没有执行那个赋值语句(只是对这个语句检查错误,和分配空间
),因此编译阶段,它将认为column 是个变量。所以上面的二维数组定义是错误的, 它不能通过编译。
c++二维
int **p= new int*[size];//定义指针数组
for(int i=0;i<size;i++)
{
p[i]=new int[Column];
}
//释放空间哇
for(int i = 0; i<size; i++)
{
delete[] p[i];
}
delete[] p;
No.2
二分查找,返回第一次出现位置或者(-1-应该存在的位置)
额,要注意边界条件吧
比如while(low<=high)
是小于等于
最后的应该位置是high+1
或者low
#include<iostream>
using namespace std;
int binary(int p[],int n,int x)
{
int low = 0,high = n-1;
while(low<=high)
{
int mid = (low+high)/2;
if(x<p[mid])
high = mid-1;
else
low = mid+1;
}
if(low>high)
return (-1-low);
}
int main()
{
int x,n;
cin>>x>>n;
if(n==0)
{
cout<<-1<<endl;
return 0;
}
int * a = new int [n];
for(int i = 0;i<n;i++)
{
cin>>a[i];
if(a[i]==x)
{
cout<<i<<endl;
return 0;
}
}
cout<<binary(a,n,x)<<endl;
delete a;
return 0;
}