八大数据结构-数组

 

  1. 寻找数组中第二小的元素
     1   public static int GetSecMinValue(int[] arr)
     2         {
     3             if (arr.Length < 2)
     4             {
     5                 throw new Exception("数组长度不符合要求,最小长度为2");
     6             }
     7             int FirstMinValue = Math.Min(arr[0], arr[1]);
     8             int SecMinValue = Math.Max(arr[0], arr[1]);
     9             for (int i = 0; i < arr.Length; i++)
    10             {
    11                 if (arr[i] < FirstMinValue)
    12                 {
    13                     int tmp = FirstMinValue;
    14                     FirstMinValue = arr[i];
    15                     SecMinValue = tmp;
    16                 }
    17                 else if (arr[i] < SecMinValue && arr[i] != FirstMinValue)
    18                 {
    19                     SecMinValue = arr[i];
    20                 }
    21             }
    22             return SecMinValue;
    23         }
    View Code
  2. 找到数组中第一个不重复出现的整数
     1  public static int GetFirstNoRepeat(int[] arr)
     2         {
     3             foreach (int value in arr)
     4             {
     5                 int Count = arr.AsEnumerable().Where(p => p == value).Count();
     6                 if (Count == 1)
     7                     return value;
     8             }
     9             return 0;
    10         }
    View Code
  3. 合并两个有序数组,自己的方案(假设数组大小从小到大)
     1   public static int[] MergeSortedArray(int[] arr1, int[] arr2)
     2         {
     3             List<int> lst = new List<int>();
     4             int index = 0;
     5             for (int i = 0; i < arr1.Length; i++)
     6             {
     7                 while (arr1[i] >= arr2[index])
     8                 {
     9                     lst.Add(arr2[index]);
    10                     index++;
    11                 }
    12                 lst.Add(arr1[i]);
    13             }
    14             for (; index < arr2.Length; index++)
    15             {
    16                 lst.Add(arr2[index]);
    17             }
    18             return lst.ToArray();
    19         }
    View Code
  4. 合并两个有序数组,参考网上最优方案(假设数组大小从小到大) 
     1  public static int[] MergeSortedArray_Update(int[] arr1, int[] arr2)
     2         {
     3             if (arr1.Length == 0 && arr2.Length != 0) return arr2;
     4             if (arr2.Length == 0 && arr1.Length != 0) return arr1;
     5             if (arr1.Length == 0 && arr2.Length == 0) return new int[] { };
     6             int[] resultArr = new int[arr1.Length + arr2.Length];
     7             int arr1Index = arr1.Length - 1;
     8             int arr2Index = arr2.Length - 1;
     9             while (arr1Index >= 0)
    10             {
    11                 if (arr1[arr1Index] > arr2[arr2Index])
    12                 {
    13                     resultArr[arr1Index + arr2Index + 1] = arr1[arr1Index];
    14                     arr1Index--;
    15                 }
    16                 else if (arr1[arr1Index] < arr2[arr2Index])
    17                 {
    18                     resultArr[arr1Index + arr2Index + 1] = arr2[arr2Index];
    19                     arr2Index--;
    20                 }
    21                 else
    22                 {
    23                     resultArr[arr1Index + arr2Index + 1] = arr2[arr2Index];
    24                     arr2Index--;
    25                     resultArr[arr1Index + arr2Index + 1] = arr1[arr1Index];
    26                     arr1Index--;
    27                 }
    28                 if (arr2Index < 0) break;
    29             }
    30             for (; arr2Index >= 0; arr2Index--)
    31             {
    32                 resultArr[arr2Index] = arr2[arr2Index];
    33             }
    34             for (; arr1Index >= 0; arr1Index--)
    35             {
    36                 resultArr[arr1Index] = arr1[arr1Index];
    37             }
    38             return resultArr;
    39         }
    View Code
  5. 重新排列数组中的正数和负数
     1  public static void SortedArr(int[] arr)
     2         {
     3             if (arr.Length == 0 || arr.Length == 1) return;
     4             int less = 0;
     5             int plus = 0;
     6             int index = 0;
     7             while (index < arr.Length)
     8             {
     9                 if (arr[index] < 0)
    10                 {
    11                     less = index;
    12                     while (plus < less)
    13                     {
    14                         int tmp = arr[less - 1];
    15                         arr[less - 1] = arr[less];
    16                         arr[less] = tmp;
    17                         less--;
    18                     }
    19                     plus = less + 1;
    20                 }
    21                 index++;
    22             }
    23         }
    View Code

     

posted @ 2019-09-20 17:11  sky&&dan  阅读(107)  评论(0)    收藏  举报