日期:2014-05-20  浏览次数:20833 次

今天微软面试的一道算法题。求各位帮忙解决。!
给定方法签名:
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,大于用上方法
如果小于,那就倒过来看待,是一样的,逻辑反正就是这样的了
------解决方案--------------------
探讨
引用:
如果可以的话,直接另外定义一个数组,这个构造就不用说了吧,太简单了

如果是只有一个数组,采用移动的方式,那就直接
定义n=numberOfElements-1,maxindex=array.length-1;

array[n]---array[maxindex]交换
n--;maxindex--;
重复以上步骤直到n到0
可以……

------解决方案--------------------
应当用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
  }

------解决方案--------------------