首页 > 其他 > 详细

C笔试题之编程题三

时间:2019-05-12 10:14:52      阅读:131      评论:0      收藏:0      [点我收藏+]

9、写一个函数找出一个整数数组中第二大的数。—— Microsoft

 1 const int MINNUMBER = -32768;//假设int占2个字节
 2 
 3 int find_sec_max(int data[], int count)
 4 {
 5     int maxnumber = data[0];
 6     int sec_max = MINNUMBER;
 7 
 8     for (int i = 1; i < count; i++)
 9     {
10         if (data[i] > maxnumber)
11         {
12             sec_max = maxnumber;
13             maxnumber = data[i];
14         }
15         else
16         {
17             if (data[i] > sec_max)
18                 sec_max = data[i];
19         }
20     }
21 
22     return sec_max;
23 }

 10、如何判断一个单链表是有环的?不能用标志位,最多只能用两个额外指针。

  思路:如果一个单链表中有环,用一个指针去遍历,永远不会结束,所以可以用两个指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇,时间复杂度为O(n)。

 1 struct Node
 2 {
 3     int data;
 4     Node * next;
 5 };
 6 typedef struct Node Node;
 7 
 8 bool check(Node * pHead)
 9 {
10     if (pHead == NULL)
11         return false;
12     Node * pSlow = pHead;
13     Node * pFast = pHead;
14 
15     while ((pFast != NULL) && (pFast->next != NULL))
16     {
17         pSlow = pSlow->next;
18         pFast = pFast->next->next;
19         if (pSlow == pFast)
20             return true;
21     }
22     return false;
23 }

 

C笔试题之编程题三

原文:https://www.cnblogs.com/yangzx/p/10850821.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!