小白是公司的初级程序员,最近对工作有了更高的期望,昨天去面试了,回来问小白今天面得怎么样了,有啥难题吗?小白说做笔试题了,除了手写代码的试题,都没有啥难度,其实题目不难,就是手写代码很别扭,老忘记单词,是什么题目呢?给一个数组实现反转。.
小白也想到到了有现成函数,如果用VS一句代码实现,使用循环的话小白写的有点吃力,最后放弃了。
解惑
其实这道题面试官主要考察对循环、数据结构和简单算法的使用,如果使用内置函数的话反而不好。我们替小白实现一下:
1、使用内置函数
使用内置函数很简单,一句代码解决:
int[] arr = { 1, 2, 8, 9, 11, 23, 25 };
Array.Reverse(arr);//反转函数
foreach (var item in arr)
Console.WriteLine(item);
//输出:25,23,11,9,8,2,1
2、使用自定义方法
自定义方法可以使用循环替换的方法实现,还可以使用栈先进先出的方式来实现。
循环替换方法:
int[] arr = { 1, 2, 8, 9, 11, 23, 25 };
int begin = 0;
int end = arr.Length-1;
while (begin < end)
{
int temp = arr[end];//设置临时替换值
arr[end] = arr[begin];//替换
arr[begin] = temp;
begin++;
end--;
}
foreach (var item in arr)
Console.WriteLine(item);
使用栈方法:
int[] arr = { 1, 2, 8, 9, 11, 23, 25 };
Stack<int> intStack = new Stack<int>();
for (int i=0;i <= arr.Length - 1; i++)
{
intStack.Push(arr[i]);//加入栈中
}
for (int i = 0; i <= arr.Length - 1; i++)
{
arr[i] = intStack.Pop();//读取栈
}
foreach (var item in arr)
Console.WriteLine(item);
上面只是为了展示效果,小白可以把上面两个自定义的过程封装成方法,传入要转换的开始和结束的下标,并做非空判断,这样一定是加分项。如下
private void Run(int[] arr, int begin,int end)
{
if(arr==null)
return;//可以输入提示文字
if (begin >= end)
return;//可以输入提示文字
if(end> arr.Length-1)
return;//可以输入提示文字
while (begin < end)
{
int temp = arr[end];
arr[end] = arr[begin];
arr[begin] = temp;
begin++;
end--;
}
foreach (var item in arr)
Console.WriteLine(item);
}
完美
结语
以上把两个方法都写出来,绝对是满分,小白看到一定很惊奇。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。