非科班的女渣硕士,用博客记录一下自己学的东西,有些错误还望大家指点,谢谢!
题目
输入一个数组和一个数字s,在数组中查找两个数,使得他们和正好为s,如果有多对数字和等于是,输出任意一对即可
new 创建一个动态数组
int *f=new int [10], delete [] f
求数组的长度
`int num=sizeof(data) /sizeof(data[0]);`
#include<iostream>
using namespace std;
//O(n*n) 的方法
int* FindNumbersWithSum(int data[],int num,int sum,int find[])
{
if (num<1|| data==NULL)
{
return NULL;
}
find=new int [2];
bool find_flag=0;
for(int i=0;i<num;i++)
{
for(int j=0;j<num;j++)
if(sum-data[i]==data[j])
{
int *find=new int [2];
find[1]=data[i];
find[0]=data[j];
find_flag=1;
cout<<find[0]<<endl;
cout<<find[1]<<endl;
return find;
break;
}
if(find_flag)
{
break;
}
}
if(find_flag)
{
return NULL;
}
}
int main()
{
int data[10]={1,2,3,4,5,2};
int num=sizeof(data) /sizeof(data[0]);
int *find=NULL;// 先进行一个初始化的过程
int sum=3;
find=FindNumbersWithSum(data,num,sum,find);
cout<<*find<<endl;
//cout<<find[1]<<endl;
delete []find; // 应该在外面进行一个delete // 当你想返回数组的时候为了不跨函数进行new 和delete 最好直接在函数里面进行传参数
}
// 这个是最暴力的方法,这样的话复杂度为n*n
上面方法的复杂程度太高了,还有一种方法就是先对数组进行排序,然后使用两个指针进行判断
#include<iostream>
using namespace std;
//先排序的方法
int* FindNumbersWithSum(int data[],int *pHead,int *pEnd,int sum,int result[],int num)
{
if (num<1|| data==NULL)
{
return NULL;
}
while(pHead<pEnd)
{
if(*pHead+*pEnd==sum)
{
int *result=new int [2]; //注意new int [2] 而不是int a[2]开辟动态数组
result[0]= *pHead;
result[1]= *pEnd;
return result;
break;
}
else if(*pHead+*pEnd<sum)
{
pHead++;
}
else
pEnd--;
}
}
int Sort(int data[],int num)
{
for(int i=0;i<num-1;i++)// 两两比较的操作次数
{
for(int j=0;j<num-i-1;j++)//冒泡排序的思想是前一个和后一个对比,最后固定了i个
{
if(data[j]>data[j+1])
{ // cout<<j<<endl;
//cout<<data[j+1]<<endl;
int temp=data[j+1];
data[j+1]=data[j];
data[j]=temp;
}
}
}
}
int main()
{
int data[10]={1,2,3,4,5,6,19,5,2,10};
int num=sizeof(data) /sizeof(data[0]);
int *result=NULL;// 先进行一个初始化的过程
int *pHead,*pEnd;
pHead=data;
pEnd=pHead;
int j=0;
while(j<num)
{
pEnd++;
j++;
}
pEnd--;// 这一行要注意加上
cout<<*pEnd<<endl;
int sum=5;
Sort(data,num);//排序
j=0;
// while(j<num)
// {
// cout<<data[j]<<endl;
// j++;
//
// }
result=FindNumbersWithSum(data,pHead,pEnd,sum,result,num);
cout<<result[0]<<endl;
cout<<result[1]<<endl;
delete []result;
return 0;
}