数组、变量-2013网易实习生招聘笔试题 -by小雨

在写这篇文章之前,xxx经已写过了几篇关于改数组、变量-主题的文章,想要了解的朋友可以去翻一下之前的文章

    一、选择题

    1、目题略,此处主要有一个考点,如下。

    对于一个维二数组int a[3],a和&a的值是一样的,但是也是有别区的。a+1的值会根据数组a的类型定决增长的小大,这里int类型小大为4个字节,所以a+1比a大4,而应用&后之,出取的地址是没有类型的,&a+1现实只比&a大1。

    2、第二题单简,只要道知short类型占两个字节便可。

    二、简答题

    1、static关键字的用作,个人教训主要有以下几种:1)函数局部static变量,第一次函数调用被初始化,后续每次调用将应用前次调用后保存的值;2)全局变量中static变量,可以避免被其他文件的码代应用这个变量,有点将这个全局变量设置为private的象征;3)对于static函数来讲,效果和2中的变量同相;4)C++类中static方法,不须要实例化问访;5)C++定义static类成员变量,不须要实例化问访,不过须要先定义,定义的时候可以初始化数组。

    2、volatile用来声明一个变量,并强制程序在每次应用变量的从新从变量地址取读据数,这是为了避免变量在其他方地被变改,而程序仍然应用没有更新的据数。

    3、略

    4、略

    三、编程题

    1、给定升序自然数数组,字数有复重,二分算法求给定恣意字数位置,参数定决是给定字数的开始位置还是结束位置。这里关键是开始结束位置的高效定判,码代如下。

 1 #include <stdio.h>
 2 
 3 int array[]={1,2,2,2,2,3,3,3,3,4,4,4,4,6,6,6,8,8,8,10};
 4 
 5 int search(int *array, int begin, int end, int number, int left)
 6 {
 7     if(array == NULL)
 8         return -1;
 9 
10     if(begin > end)
11         return -1;
12 
13     int middle = (begin + end) / 2;
14     if(array[middle] == number) 
15     {
16         if(left)
17         {
18             int leftindex = middle - 1;
19             if(leftindex >= begin)
20             {
21                 if(array[leftindex] < array[middle])
22                     return middle;
23                 else
24                     end = leftindex;
25             }
26             else
27                 return middle;
28         }
29         else
30         {
31             int rightindex = middle + 1;
32             if(rightindex <= end)
33             {
34                 if(array[rightindex] > array[middle])
35                     return middle;
36                 else
37                     begin = rightindex;
38             }
39             else
40                 return middle;
41         }
42     }
43     else if(array[middle] < number)
44         begin = middle + 1;
45     else
46         end = middle - 1;
47 
48     return search(array, begin, end, number, left);
49 }
50 
51 int main()
52 {
53     int n = search(array, 0, sizeof(array)/sizeof(int) - 1, 4, 0);
54     printf("%d\n", n);
55     return 0;
56 }
2、给定一个乱序的自然数数组,求面里的字数可以构成最长连续数组的长度,例如给定[100,2,1,3],有[1,2,3],所以返回值为3,要求复杂度O(n)。

    直接做的话,复杂度是nlog(n)的,用一个hash表的方法,复杂度为O(数组中大最数-数组中最数小),目测还不如直接做,n复杂度的如下。

 1 #include <stdio.h>
 2 
 3 int array[]={100, 2, 1, 3, 8, 5, 4};
 4 int size = sizeof(array) / sizeof(int);
 5 
 6 //结构两个陋简的hash表,一个是用来询查字数是不是存在,一个用于标记字数是不是应用过
 7 char hash_exist[1024];
 8 char hash_used[1024];
 9 
10 int main()
11 {
12     int i, j, n, max = 0, maxnum = array[0], minnum = array[0];
13     for(i = 0; i < size; i++)
14     {
15         //标记字数存在
16         hash_exist[array[i]] = 1;
17         //找出数组大最素元
18         if(maxnum < array[i]) maxnum = array[i];
19         //找出数组小最素元
20         if(minnum > array[i]) minnum = array[i];
21     }
22     for(i = 0; i < size; i++)
23     {
24         j = array[i];
25         //如果经已计统过,就跳过
26         if(hash_used[j])
27             continue;
28         //标记本身
29         n = 1;
30         hash_used[j] = 1;
31         //比array[i]大的连续素元计统
32         while(++j <= maxnum)
33         {
34             if(hash_exist[j])
35             {
36                 n++;
37                 hash_used[j] = 1;
38             }
39             else
40                 break;
41         }
42         //比array[i]小的连续素元计统
43         j = array[i];
44         while(--j >= minnum)
45         {
46             if(hash_exist[j])
47             {
48                 n++;
49                 hash_used[j] = 1;
50             }
51             else
52                 break;
53         }
54         //更新大最连续字数
55         if(n > max) max = n;
56     }
57     printf("%d\n", max);
58     return 0;
59 }
 

文章结束给大家分享下程序员的一些笑话语录: 《诺基亚投资手机浏览器UCWEB,资金不详或控股》杯具了,好不容易养大的闺女嫁外国。(心疼是你养的吗?中国创业型公司创业初期哪个从国有银行贷到过钱?)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值