反转数组

昨天老赵给了篇文章《为什么我要反对北大青鸟》,回想起刚毕业那会儿为了生计差点儿进北大青鸟做讲师,差点儿害人害已。细想来我还是幸运的。老赵在文章中提到:如果不能将一个数组反转,还能叫程序员吗?

我细细想来,我从写程序到现在还真没有做过这样的事。我进入程序员行业中学习的是C++语言,但除了写些东西玩玩外,平时已经不用了,更确切地说:不太会用了。有些语法已经需要翻《C++ Primer》,这也使我诚惶诚恐,每次面试前我都需要将这个大部头再翻一下回忆回忆,省得到时面试官让我写个代码我一行写不出,但简历或许是精通或熟悉C++。

前两天听Anders的讲座,讲座中提到当前语言发展的三大块:Language, Library, Tools。其中Language进步很小,而Library和Tools进步神速。我当时也在Twitter发了tweet支持这个观点。但后来我又仔细想了一下,虽然当前语言大都还是由if...else...组成,但由于库的增强使得需要写if..else的时间越来越少。

为验证一下自己是不是程序员,我也来写一个反转数组的程序。先来个简单地C#版:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Program
{
    static void Main(string[] args)
    {
        List<int> arr = new List<int> { 2, 5, 3, 1, 4, 7, 6 };
 
        PrintArray(arr);
        arr.Reverse();
        PrintArray(arr);
 
        Console.ReadKey();
    }
 
    static void PrintArray(List<int> arr)
    {
        arr.ForEach(i => Console.Write("{0} ", i));
        Console.WriteLine();
    }
}

就真实应用来说上面的数组反转更可能出现在生产代码中,有多少程序员在生产环境中写过反转数组的代码?

面试数组反转主要考的是思维基础。我又用C写了一个数组反转的程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "stdafx.h"
#define SIZE 7
 
void PrintArray(int arr[]);
void ReverseArray(int arr[]);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int original[] = {2,5,3,1,4,7,6};
    PrintArray(original);
     
    ReverseArray(original);
    PrintArray(original);
 
    char wait = getchar();
    return 0;
}
 
void PrintArray(int arr[])
{
    for(int i = 0; i < SIZE; i++)
        printf("%d ",arr[i]);
    printf("\n");
}
 
void ReverseArray(int arr[])
{
    int temp = 9999;
    for(int i=0; i < SIZE/2; i++)
    {
        temp = arr[i];  //Step One
 
        int lastIndex = (SIZE - 1) - i;
        arr[i] = arr[lastIndex];  //Step Two
 
        arr[lastIndex] = temp;    //Step Three
    }
}

但就是这个数组反转代码段,我在面试的时候也没有写出来。即使今天我写这个程序也用了半个小时,但真正思考的时间却不多。漫长地半个小时是这样过来的:

1,想一下问题,选一组测试数据。2分钟。

2,空想不行,画个图,思考一下,比如元素个数为奇数和元素个数为偶数处理上有没有什么不同。2 分钟。

3,想一下语言特性:地板除7/2结果是3,验证一下。(中间上网下了本ebook,乱想了一会儿)。 20分钟以上。

4,验证。 1分钟。

即使写好了,我仍然诚惶诚恐。因为我不能保证我写的程序没有bug。我想很多朋友随便看上两眼bug或许就出来了。做个程序员或许不难,找份职位是程序员或软件工程师的工作就成,但编程好难啊 :D

posted @   Jerry Chou  阅读(1741)  评论(2编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示