daniel 匆匆过客

IT博客 首页 新随笔 联系 聚合 管理
  3 Posts :: 0 Stories :: 7 Comments :: 0 Trackbacks
在一个集合S中寻找最大的C使A+B=C且A,B,C均在集合当中
解答(原创)
1,将集合S中的数排序X1<=X2<=X3.............Xn;
2,for(i=n;i>0;i--)
{
for(j=0,k=i-1;k>j;)
{
if(Xj+Xk>Xi)
{
      k--;
      cotinue;
}
if(Xj+Xk<Xi)
{
      j++;
      contiue;
}
A=Xj;
B=Xk;
C=Xi;
break;
}
例子:
1,4,7,10,11,13,15,18,34
34:1-18,4-18........15-18
18:1-15,4-15,4-13,7-13,7-11
结果:
A=7;B=11,C=18;
posted on 2006-08-03 14:33 danielcheng 阅读(1984) 评论(7)  编辑 收藏 引用 所属分类: 练练手

Feedback

# re: google笔试题:A+B=C 2006-08-09 12:23 Demi
Relax and enjoy yourself! No big deal,just practice oral English more and more,I believe Google's HR will marvel at your progress,:)  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-08 22:59 enel
没有考虑时间复杂度的问题吗?是不是应该用分治的办法?  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-08 23:14 mie

用分治如何搞?
  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-09 15:00 闲人
K++,应该是k--吧  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-09 15:16 danielcheng
确实应该是K--
  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-09 15:17 danielcheng
应该是k--  回复  更多评论
  

# re: google笔试题:A+B=C 2006-10-10 11:29 jenny
是否还要加个判断:
flag = 0;
for(i=n;i>0;i--)
{
if(flag==0)
{
for(j=0,k=i-1;k>j;)
{
if(Xj+Xk>Xi)
{
k--;
cotinue;
}
if(Xj+Xk<Xi)
{
j++;
contiue;
}
A=Xj;
B=Xk;
C=Xi;
flag=1;
break;
}
}
else break;
}  回复  更多评论
  

只有注册用户登录后才能发表评论。