合并的数组会有顺序么_leetcode刷题-寻找两个正序数组的中位数-swift

题目描述:

194d728d91ab0ada13fb11e6588de3e7.png

题目入口:

力扣​leetcode-cn.com

通过截图:

9c42f9a470c96dbaaa0259f3908b4d04.png
使用冒泡排序算法

b0ebdb5d81d95935ea3dc4240dd7c237.png
148ms为选择排序算法

c27e3b431faeb3b3f2da5af228c20aa1.png
180ms为插入排序算法

解题思路:

  1. 冒泡排序为基础的解题思路:合并数组,冒泡排序算法,求中位数[见通过截图一,代码一]
  2. 选择排序为基础的解题思路:每次循环取两数组中最小的值,加入缓冲数组,把该值从两数组删除,继续循环,直到排序完成,求中位数[见通过截图二,代码二]
  3. 插入排序(Insertion Sort)为基础的解题思路:将数组合并,插入排序算法(依次取出第二个数组元素顺序从前比对第一个数组元素,遇到比它大的就插进去,循环),求中位数[通过截图见图三,代码三]
  4. ...[关于其余排序算法待实现]

0c23dd2b9938719ee1685ef3c5a43619.png
排序算法表

实现代码:[使用冒泡排序--解的时候还以为时间会超时,没想到过去了哈哈。其余排序算法代码之后更新]

class Solution {
    func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
     var buffArray = [Int]()
    var nu1 = nums1.count
    let nu2 = nums2.count
    var medianNum: Double = 0
     var cup=0
    //排序算法:冒泡
   buffArray=nums1+nums2
    for i in 0 ..< nu1+nu2{
        for j in 0 ..< nu1+nu2{
            if buffArray[i] < buffArray[j]{
                var cup = buffArray[i]
                buffArray[i]=buffArray[j]
                buffArray[j] = cup

            }
        }
    }
    //中位数计算:此处基本没问题
    var num=0
    if (nu1+nu2)%2==1 {//奇数
        nu1 = (nu2+nu1-1)/2
        num = buffArray[nu1]
        medianNum = Double(num)
    }
    else{//偶数
        nu1 = (nu1+nu2)/2
        num = buffArray[nu1-1]+buffArray[nu1]
        medianNum = Double(num)/2
    }
    return medianNum
    }
}

代码二:[选择排序]

class Solution {
    func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
     var buffArray = [Int]()
    var medianNum: Double = 0
    var bufnum1=nums1
    var bufnum2=nums2
    //排序算法:选择排序
    for _ in 0 ..< nums1.count+nums2.count{
        if bufnum1.isEmpty{
            buffArray=buffArray+bufnum2
            bufnum2.removeAll()
           
        }
        else{
            if bufnum2.isEmpty{
            buffArray=buffArray+bufnum1
            bufnum1.removeAll()
            
            }
            else{
                if !bufnum2.isEmpty && !bufnum1.isEmpty{
                    let min1: Int = bufnum1.first!
                    let min2: Int = bufnum2.first!
                    if(min1<min2){
                        buffArray.append(min1)
                        bufnum1.removeFirst()
                        
                    }
                    else{
                        buffArray.append(min2)
                        bufnum2.removeFirst()
                       
                    }
                }
            }
        }
    }
   
    //中位数计算:此处基本没问题
    var num=0
    if (nums1.count+nums2.count)%2==1 {//奇数
        let nu1 = (nums1.count+nums2.count-1)/2
        num = buffArray[nu1]
        medianNum = Double(num)
    }
    else{//偶数
        let nu1 = (nums1.count+nums2.count)/2
        num = buffArray[nu1-1]+buffArray[nu1]
        medianNum = Double(num)/2
    }
    return medianNum
    }
}

代码三:插入排序算法

class Solution {
    func findMedianSortedArrays(_ nums1: [Int], _ nums2: [Int]) -> Double {
      var buffArray = [Int]()
    var medianNum: Double = 0
    //排序算法:插入排序
   buffArray = nums1+nums2//合并,此时buff长为n+m,从第m个从头排起
    for i in 0 ..< nums2.count{
        for j in i ..< nums1.count+nums2.count{
            if buffArray[j] >= nums2[i]{
                buffArray.insert(nums2[i], at: j)
                buffArray.remove(at: i+nums1.count+1)
                break;
            }
        }
    }
    
    //中位数计算:此处基本没问题
    var num=0
    if (nums1.count+nums2.count)%2==1 {//奇数
        let nu1 = (nums1.count+nums2.count-1)/2
        num = buffArray[nu1]
        medianNum = Double(num)
    }
    else{//偶数
        let nu1 = (nums1.count+nums2.count)/2
        num = buffArray[nu1-1]+buffArray[nu1]
        medianNum = Double(num)/2
    }
    return medianNum
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值