c++中*(a+i*b+j)是否等于a[i][j],a是一个数组,b是常数

O(nlog(n))
O(n^2log(n))
leetcode中的 3-sum问题。
a + b +c = 0 的方式,
本题巧妙的变为 a+ b -c
=0 的方式。本质上没有不同。
方法是先排序,然后确定C,对a和的b的值进行左右夹逼。
轮询C的次数是N,夹逼一次的次数是N,那么总的复杂度是N* N
//使用hash保存两数的和
//然后从头遍历数组,查看是否包含在hash中
//时间复杂度O(n^2).
bool foo(const std::vector&int& &vec) {
__gnu_cxx::hash_set&int&
for(int i = 0; i & vec.size()-1; ++i) {
for(int j = i+1; j & vec.size(); ++j) {
int sum = vec[i] + vec[j];
//将结果保存到hash_set中
if(set.find(sum) == set.end()) {
set.insert(sum);
for(int i = 0; i & vec.size(); ++i) {
//判断正确
if(set.find(vec[i]) != set.end()) {
对于B选项,可以这样实现。
(1)先对数组进行排序,时间为O(nlogn),然后从大往小取a[k],n次
然后在0到k-1之间夹出i,j来...每次K操作...若存在负数,则需要在0到n-1之间夹出i,j;
(2)先对数组进行排序,时间为O(nlogn),然后两次for循环嵌套,进行hash查找;
对于D选项,可以这样实现。
(1)先对数组进行排序,时间为O(nlogn),然后两个for循环嵌套,二分查找a[i]+a[j]是否在数组中;
应该是O(N^2),排序O(nlogn) + O(n*n)
答案错了吧,应该先排序+两端指针法,然后便利k 选B 吧
leetcode中的 3-sum问题。
a + b +c = 0 的方式,
本题巧妙的变为 a+ b -c
=0 的方式。本质上没有不同。
方法是先排序,然后确定C,对a和的b的值进行左右夹逼。
轮询C的次数是N,夹逼一次的次数是N,那么总的复杂度是N* N
可以参考twosum,首先查找k可能需要O(N),因为需要不断遍历数组下标k的元素,此时变成一个twosum问题,可以用哈希表O(N)解决
通过hash可以O(n)解决
又是算法题:网上给的答案是B
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
京ICP备号-4
扫一扫,把题目装进口袋您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
C++题库.docx 249页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
C++基础知识【当前难度】1下列字符串中可以用作C++标识符的是A.2009varB.gotoC.test-2009D._123D下列哪个是C++语言的合法的字符常量__________。A.””?B.’054’?C.’x89’D.’92’C已知字母A的ASCII码为65,则表示字符常量A错误的是__________。A.'101'B.'x41'C.65D.“A”D下列哪个是C++语言的不正确的标识符__________?A._No1B.Ab1C.bgcD.intD下列常量中不能作为c++常量的是__________。A.0382B.?0xB4C..5e-2D.123A在以下选项中,与k=n++完全等价的表达式是__________。A.k=n,++n;?B.n=n+1,k=n;?????C.k=++n;?D.k+=n+1;A定义整型变量x,y,z并赋初始值6的正确语句是__________。A.int x=y=z=6;?B.int x=6,y=6,z=6;?C.x=y=z=6;D.int x,y,z=6;B定义变量int a=6,则a++的值是__________。A.7B.6C.5D.4B结构化程序由三种基本结构组成,不包括__________。A.顺序结构B.选择结构C.控制结构D.循环结构C表达式(1,2,3,4)的结果是__________。A.1B.2C.3D.4D关于C++和c语言的描述中,错误的是__________。A.C语言是C++的一个子集B.?C语言和C++是兼容的C.C++对C语言进行了一些改进D.C语言和C++都是面向对象的D下列字符串常量中,错误的表示是(????? )。A.""Yes" or"No"?"??B."abcd "C.′ABC′D." OK!"C不属于c++源程序的独立部分是_______。A.声明部分B.存储区分配部分C.编辑预处理部分D.函数部分Bx为int型,s为float型,x=3,s=2.5。表达式s+x/2的值为________。A.4B.3.5C.2.5D.3B对任意整型数据数据m,n(m>n>0),则与C++表达式 m-m/n*n 的值等价的式子为:(????? )。A.0B.m%n?C.1D.n%mBc++源程序中,以下说法不正确的是__________。A.逗号运算符的优先级最低B.Pcn和pcn是两个不同的标识符C.变量定义语句一定会给变量赋初值D.表达式1/4+1/4+1/4的结果为0C变量生存期是指_____________。A.变量定义B.程序的运行期间C.变量在内存中分配存储单元到被释放期间D.可执行代码的生存期C己知有定义const int d 5;int i=1;double f=0.32;char c="c";下面哪个命令是错误的————。A.++i;B.D--;C.c++;D.--f;B在位运算中,操作数每右移一位,其结果相当于__________。A.操作数乘以2B.操作数除以2C.操作数乘以4D.操作数除以4B在函数中如果不说明变量的存储类型,则默认的存储类型是__________。???????A.autoB.staticC.externD.registerA二进制文件与字符文件不同的是________。A.二进制文件中每字节数据都没有用ASCII码表示B.二进制文件包含了ASCII码控制符C.二进制文件一般以字符‘’结束D.二进制文件用字符endl表示行的结束A下列关于c++源程序正确的说法是A.每行只能写一个语句B.每条语句(包括预处理命令)必须以分号结束C.注释语句会生成机器码D.最好向右缩进表达程序的层次结构Dx、y为整数,x=15, y=-2。表达式x>10?&& ?y<2 ||x*y==10?&& x的值为(????? )。A.0B.15C.1D.2C函数的返回值的类型由_________决定。A.调用该函数的主调函数类型B.return语句中的表达式类型C.定义函数时所指定的返回值类型D.调用函数时临时决定C以下选项中属于c++语言的数据类型是__________。A.复数型?B.日期型C.双精度型D.集合型C用c++语言编写的代码程序__________。A.可立即执行B.是一个源程序?C.经过编译即可执行D.经过解释才能执行B在C++语言中.表示一条语句结束的标号是__________。A.“#”B.“;”C.“}”D.“//”B有关符号常量不正确的说法是_______。A.增加了程序执行速度B.增强程序的可读性C.书写简单,不易出错D.修改程序方便A下列表达式中,可作为C++合法表达式的是(????? )A.[4,3,2,1]B.(4,3,2,1)C.4=3=2=1D.4—B下列选项中不属于C++的类型的是(? )。A.s
正在加载中,请稍后...C语言中 b[j]=a[i]; j++; 和 b[j++]=a[i];一样吗_百度知道
C语言中 b[j]=a[i]; j++; 和 b[j++]=a[i];一样吗
C语言中b[j]=a[i];j++;和b[j++]=a[i];一样吗
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
一样。建议按第一种写法写,自己明白,别人也明白,而且不容易出错。
采纳率:59%
一样,将a[i]中的值赋给b[j],然后j自增。
是一样的,j++是执行后那条指令才加1的
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,对于1&=i,j&=k,求k个最小的(ai+bj),要求算法尽量高效
题目:有两个序列A和B,A=(a1,a2,...,ak),B=(b1,b2,...,bk),A和B都按升序排列,对于1&=i,j&=k,求k个最小的(ai+bj),要求算法尽量高效 .
解法:设定两个下标i,j分别指向A,B的尾部,若当前(i-1)*j&=k或(j-1)*i&=k说明,剩下的组合是最小的i*j,而且可以根据A[i],B[j]两个元素的大小分别移动相应的下标,直到(i-1)*j&k或(j-1)*i&k,此时剩下的组合数为i*j,遍历数组求得前k个最小和,返回给用户。
#include&iostream&
int *min_k(int *A,int *B,int len1,int len2,int k);
int main()
int len1,len2,k;
cin&&len1&&len2&&k;//输入两个数组的长度len1,len2以及最小的和的数目
int *A=new int[len1];
int *B=new int[len2];
for(i=0;i&len1;i++)
cin&&A[i];
for(i=0;i&len2;i++)
cin&&B[i];
int *result=min_k(A,B,len1,len2,k);
for(i=0;i&k;i++)
cout&&result[i]&&& &;
delete []A;
delete []B;
int *min_k(int *A,int *B,int len1,int len2,int k)
if(A==NULL||B==NULL||k&=0)
return NULL;
int *tmp=new int[k];
while(i&0&&j&0)
if(A[i-1]&B[j-1])
if((i-1)*j&=k)
if((j-1)*i&=k)
int count=0;
if(A[i-1]&B[j-1])
for(p=0;p&i;p++)
for(q=0;q&j;q++)
if(count&k)
tmp[count++]=A[p]+B[q];
for(p=0;p&j;p++)
for(q=0;q&i;q++)
if(count&k)
tmp[count++]=B[p]+A[q];
时间复杂度为min{O(min(len1,len2)),O(k)},空间复杂度为O(k),若只是需要输出最小的k个和,则不需要用O(k)的空间把k个最小和存储起来,这样时间复杂度为O(1).以下试题来自:
单项选择题一个数组元素a[i]与()的表示等价。
A.*(a+i)
为您推荐的考试题库
您可能感兴趣的试卷
你可能感兴趣的试题
A.(front-rear+1)%m
B.(rear-front+1)%m
C.(front-rear+m)%m
D.(rear-front+m)%m
B.模式匹配
A.起泡排序
C.锦标赛排序
D.快速排序
A.内部结构与外部结构
B.静态结构与动态结构
C.线性结构与非线性结构
D.紧凑结构与非紧凑结构

我要回帖

更多关于 a=2i+j,b=i+j+k 的文章

 

随机推荐