面试题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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值