两个面试题,共同探讨

良才2015 2012-02-06 09:27:55
1.合并两个排序链表(老问题,用C实现吧)

2.100个整数组成的数组,打乱次序,拿掉其中一个数,把它找出来(运用另外一个数学技巧可以几行代码搞定)

...全文
3985 78 打赏 收藏 转发到动态 举报
写回复
用AI写文章
78 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzuzhang 2012-03-09
  • 打赏
  • 举报
回复
这个很好,简单易懂,也不会溢出。[Quote=引用 15 楼 neolyao 的回复:]
C/C++ code

//2.src1为没有缺失数的数组,src2为缺少了一个数的数组,size为没有缺失的数组的总数目
int get_lost_number(const src1[], const src2[], int size)
{
int sum;
int i;

assert (src1 != NULL && src2 ……
[/Quote]
qixing1115 2012-03-09
  • 打赏
  • 举报
回复
都简单
千树之影 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 70 楼 kasabranca 的回复:]
引用 4 楼 we_sky2008 的回复:

C/C++ code

//1.
node *merge_lists(const node *head1, const node *head2)
{
node *head;
node *cur;

if (NULL == head1)
{
return head2;
}
if (NULL == head2)
{
……
……
[/Quote]
答案是把两个数组2N-1个数全异或一遍。循环里只异或了2(N-1)个数,还有一个数最后异或。
千树之影 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 72 楼 salamchui 的回复:]
引用 52 楼 wenhongang 的回复:
第2题的改进方法

C/C++ code


int get_lost_number(const src1[], const int src2[], int size)
{
int lost;
int i;

ASSERT(src1 != NULL && src2 != NULL &amp……
[/Quote]
异或可以随便交换次序的。
良才2015 2012-03-09
  • 打赏
  • 举报
回复
[Quote=引用 67 楼 heaven13483 的回复:]
所有数求和相减
[/Quote]
可以,慢了
salamchui 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 wenhongang 的回复:]
第2题的改进方法

C/C++ code


int get_lost_number(const src1[], const int src2[], int size)
{
int lost;
int i;

ASSERT(src1 != NULL && src2 != NULL && size > 0);
……
[/Quote]
如果src2[]是在原src1[]當中拿掉一個就是好樣了,但如果src2[]與src1[]沒有次序關係就不行了。
1az98你好 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 we_sky2008 的回复:]

C/C++ code

//1.
node *merge_lists(const node *head1, const node *head2)
{
node *head;
node *cur;

if (NULL == head1)
{
return head2;
}
if (NULL == head2)
{
……
[/Quote]

第二题的做法只能求出丢失的数本身,而不能找出它的下标吧?
最后的 return lost ^ src1[i] 是什么意思?
求教了
wangjieest 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 amon98276 的回复:]

不额外申请变量,实现两个数的交换,就是用到异或。
兄弟,说说具体的题目和怎么实现的呀?异或也能实现交换?
还有,异或有用,大家觉得同或也能用吗?有没有具体的例子那?
求解答。3q
[/Quote]
同或也是一样的啊...用@表示同或吧...

异或: 某一位 遇上1就改变
同或: 某一位 遇上0就改变

A^B = ~(A@B)
Heaven13483 2012-02-14
  • 打赏
  • 举报
回复
所有数求和相减
czzdcn123 2012-02-14
  • 打赏
  • 举报
回复
都是高手啊。。。。
hello_world000 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 wenhongang 的回复:]
第2题的改进方法

C/C++ code

int get_lost_number(const src1[], const int src2[], int size)
{
int lost;
int i;

ASSERT(src1 != NULL && src2 != NULL && size > 0);
……
[/Quote]
明显不行的,题目已经说了打乱次序了
比如:
int src1[] = {1, 2, 3, 4, 5};
int src2[] = {3, 1, 5, 2};
按你的代码结果就是1了,而实际去掉的那个数是4
Liaojet 2012-02-13
  • 打赏
  • 举报
回复
赞个,新手又长见识了
jackzhhuang 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 javkburd 的回复:]
4L的代码一向都很经典。谁能解释一下为什么这样用异或就能解决呢?小弟一窍不通啊!
[/Quote]

基于一个简单的原理:A^A=0。那么,假设A是原数组,A^C就是指从A中去掉C(也是基于A^A=0这个原理),那么A^A^C=C,C就被求出来了。
yyc23 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 we_sky2008 的回复:]

C/C++ code

//1.
node *merge_lists(const node *head1, const node *head2)
{
node *head;
node *cur;

if (NULL == head1)
{
return head2;
}
if (NULL == head2)
{
……
[/Quote]

赞!
chenfeng2002 2012-02-13
  • 打赏
  • 举报
回复
第一题自己写的,第二题学习了。

node * merg(node *list1, node *list2)
{

node *p1;
node *p2;
node *p = NULL;
node *list = p;

p1 = list1;
p2 = list2;
while(p1 && p2)
{
if(p1->data < p2->data)
{
p = p1;
p1 = p1->next;
}
else
{
p = p2;
p2 = p2->next;
}
p = p->nex;
}
if(NULL == p1)
{
p = p2;
}
else if(NULL == p2)
{
p = p1;
}
return list;
}
gaochizhen33 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 wenhongang 的回复:]

第2题的改进方法
C/C++ code

int get_lost_number(const src1[], const int src2[], int size)
{
int lost;
int i;

ASSERT(src1 != NULL && src2 != NULL && size > 0);

for……
[/Quote]
没看懂哪。原题中没有用0去填补空的那个整数所占用的位置。
gaochizhen33 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 javkburd 的回复:]

4L的代码一向都很经典。谁能解释一下为什么这样用异或就能解决呢?小弟一窍不通啊!
[/Quote]
a^b^c^b^a = c ;
知道这个原理就能看懂了
良才2015 2012-02-13
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 wenhongang 的回复:]
第2题的改进方法

C/C++ code


int get_lost_number(const src1[], const int src2[], int size)
{
int lost;
int i;

ASSERT(src1 != NULL && src2 != NULL && size > 0);
……
[/Quote]

不错哦
hello_world000 2012-02-10
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 qq867814126 的回复:]
引用 4 楼 we_sky2008 的回复:

C/C++ code

//1.
node *merge_lists(const node *head1, const node *head2)
{
node *head;
node *cur;

if (NULL == head1)
{
return head2;
}
if (NULL == head2)
{
……
……
[/Quote]
他在这里初始化为0了

for (lost = 0, i = 0; i < size - 1; ++i)

amon98276 2012-02-10
  • 打赏
  • 举报
回复
我查了查资料,应该没什么有用的同或算法,而且就数学理论来说同或也不像异或这样的宽泛,同或要求还是很严格的。不知道有没有高手见过同或的算法,或是用途什么的,敬请指教。
楼上的兄弟的算法学习了。3q
For the lichking.
加载更多回复(43)

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧