今天微软面试的一道算法题。求各位帮忙解决。!
给定方法签名:
C/C++ code
MoveSubArrayToTheEnd(int[] array, int numberOfElements)
传入一个数组如 {1,2,3,4,5,6,7}
将数组前面 head的一个子集移到数组末尾end
如input numberOfElements=3,则{1,2,3,4,5,6,7}=>{4,5,6,7,1,2,3}
input numberOfElements=5,则{1,2,3,4,5,6,7}=>{6,7,1,2,3,4,5}
如何写出该算法?
我没完整正确的写出来。请不要使用FCL提供的类库函数。。
------解决方案--------------------=7的时候是如何?
------解决方案--------------------如果可以的话,直接另外定义一个数组,这个构造就不用说了吧,太简单了
如果是只有一个数组,采用移动的方式,那就直接
定义n=numberOfElements-1,maxindex=array.length-1;
array[n]---array[maxindex]交换
n--;maxindex--;
重复以上步骤直到n到0
------解决方案--------------------C# code
public int[] MoveSubArrayToTheEnd(int[] array, int numberOfElements)
{
int[] temp_arr = new int[numberOfElements];
for (int i = 0; i < numberOfElements; i++)
{
temp_arr[i] = array[i];
}
return array.Except(temp_arr).Union(temp_arr).ToArray();
}
------解决方案--------------------
前面要出一点小问题,之前判断以下n是否》numberOfElements/2,大于用上方法
如果小于,那就倒过来看待,是一样的,逻辑反正就是这样的了
------解决方案--------------------
------解决方案--------------------
应当用1个变量就可以实现。
------解决方案--------------------
string a = "a,b,c,d";
string b = "1,2,3,4";
string[] arr1 = a.Split(','); //将字符串转换成数组arr1
string[] arrtemp = b.Split(',');
int[] arr2 = new int[arrtemp.Length]; //用来存放将字符串转换成int[]
for (int i = 0; i < arrtemp.Length; i++)
{
arr2[i] = int.Parse(arrtemp[i]);
}
foreach (var arr in arr1.ToList())
{
Console.WriteLine(arr);
}
先转字符串
再
input numberOfElements=3 就从左向右substring 3个 ,在从右向佐 substring 总长-3个
再拼在一起 变回字符串
------解决方案--------------------
变回数组
------解决方案--------------------
前半部倒置,后半部倒置,再整个倒置,代码回去在弄,上课中。。。
用的是BA=(A倒置B倒置)倒置
------解决方案--------------------
public int[] MoveSubArrayToTheEnd(int[] array, int numberOfElements)
{
//--加一下那其他的判断
for (int i = numberOfElements;i<array.length; i++)
{
array[i-numberOfElements]=array[i];
}
return array.Except(temp_arr).Union(temp_arr).ToArray();
}
------解决方案--------------------
C# code
public int[] MoveSubArrayToTheEnd(int[] array, int numberOfElements)
{
//--加一下那其他的判断
for (int i = numberOfElements;i<array.length; i++)
{
array[i-numberOfElements]=array[i];
}
return array
}
------解决方案--------------------