C#算法面试题

1.产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。 

        static void GetArray()
        {
            int[] intArr = new int[100];
            int[] intArr2 = new int[100];
            for (int i = 0; i < 100; i++)
            {
                intArr[i] = i+1;
            }
            Print(intArr);
            Random r=new Random();
            for (int i = 0; i < 100; i++)
            {
                int j = r.Next(100 - i);
                intArr2[i] = intArr[j];
                intArr[j] = intArr[100 - i - 1];
            }
            Print(intArr2);
            //Array.Sort(intArr2);
            //Print(intArr2);
        }
          static void Print(int[] array)
        {
            foreach (int i in array)
            {
                Console.Write(i + " ");
            }

            Console.WriteLine();
        }

上面这种最优了,如果用

int num=rnd.Next(1,101); 
if(!myList.Contains(num)) 
myList.Add(num); 
10分应该能得到1分.


2.一个int数组,将负数放在左边,正数移动在右边.0不动
        static void Sort(int[] array)
        {
            int count = array.Length;
            for (int i = 0, j = count - 1; i <= j; )
            {
                while (array[i] <= 0) i++;
                while (array[j] >= 0) j--;
                if (array[i] > 0 && array[j] < 0 && i <= j)
                {
                    array[i] = array[i] + array[j];
                    array[j] = array[i] - array[j];
                    array[i] = array[i] - array[j];
                }
            }
        }

不需要排序

3.写一个函数计算当参数为N的值:1-2+3-4+5-6+7……+N 
        static int Sum(int[] array)
        {
            if (array.Length % 2 == 0)
            {
                return  array.Length / 2*-1;
            }
           else
            {
                return array[array.Length - 1] - array.Length / 2;
            }
        }

不需要计算,请先观察即可



原文地址:https://www.cnblogs.com/birds-zhu/p/7542222.html