面试题15: 两数组中值

题目: 两个有序数组A和B,分别拥有m和n的长度,求其合并后的值.


代码实现:

func findKthSortedArrays(A, B []int) float64 {
   i, j, ia, ib, la, lb := 0, 0, -1, -1,len(A), len(B)
   k := (la + lb) / 2
   flag := false  // false表示第k个值在A上,true表示第k个值在B上

   for i < la && j < lb && ia + ib + 2 < k {
      if A[i] <= B[j] {
         ia = i
         i++
         flag = false
      } else {
         ib = j
         j++
         flag = true
      }
   }
   // A中进行探究
   for i < la && ia + ib + 2 < k {
      i++
      flag = false
   }
   // B中进行探究
   for j < lb && ia + ib + 2 < k {
      j++
      flag = true
   }

   s := 0
   if ia < 0 && ib < 0 {
      return 0
   } else if flag ==  false && ia >= 0 {
      s = A[ia]
   } else if flag == true && ib >= 0 {
      s = B[ib]
   }

   // 奇数情况
   if (la + lb) % 2 == 1 {
      return float64(s)
   }

   // 偶数情况
   if i < la && j < lb && ia + ib + 2 < k + 1 {
      if A[i] <= B[j] {
         s += A[i]
      } else {
         s += B[j]
      }
   } else if i < la && ia + ib + 2 < k + 1 {
      // A中进行探究
      s += A[i]
   } else if j < lb && ia + ib + 2 < k + 1 {
      // B中进行探究
      s += B[j]
   }

   return float64(s) / 2
}

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35191331/article/details/80345498
上一篇面试题14: 两数组第K个值
下一篇面试题16: 旋转数组最小值
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭