2019/10/19【寻找两个数组的中位数】

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

你可以假设 nums1 和 nums2 不会同时为空。

示例 1:

./script [1,3] [2]

则中位数是 2.0
示例 2:

./script [1, 2] [3, 4]

则中位数是 (2 + 3)/2 = 2.5

#!/bin/bash
#寻找两个有序数组的中位数
#

biansz(){     #函数作用是获取位置参数的数字内容
        declare -i first=0
        declare -A shuzu=()
        content=`echo "$1"|sed 's#\[\|\]##g'|sed 's#,# #g'`
        for i in $content
        do
                shuzu[$first]=$i
                first=$[$first+1]
        done
        #return $shuzu
        echo "${shuzu[@]}"
}
echo "">2.txt      #清空临时文件
aa=`biansz $1`     #获取位置参数$1的数字内容
bb=`biansz $2`     #获取位置参数$2的数字内容
echo "$aa" >>2.txt        #将数字内容追加到临时文件
echo "$bb" >>2.txt
num=`cat 2.txt|wc -w`     #获取临时文件中数字的个数
num_1=`echo "$num/2"|bc`   #获取中位数
num_3=$[$num_1+1]          #获取中位数【偶数时需要】
num_2=$[$num%2]            #用于判断数字个数是奇数还是偶数
cat 2.txt|sed 's#[ ][ ]*#\n#g'|egrep -v '^$'|sort -n >3.txt    #将临时文件中内容空白行删除,且每个数字单独为一行,最后按升序排列
if [ $num_2 -eq 0 ];then
        a1=`sed -n "$num_1 p" 3.txt|awk '{print $1}'`
        a2=`sed -n "$num_3 p" 3.txt|awk '{print $1}'`
        #echo "$a1"
        #echo "$a2"
        kk=`echo "scale=1;($a1+$a2)/2"|bc`
        echo "$kk"
else
        a1=`sed -n "$num_3 p" 3.txt`
        echo "$a1"
fi

效果展示:

[root@localhost leetcode]# ./liangshuzu_zhongweishu.sh [2,4,7,6,7,4]
5.0
[root@localhost leetcode]# ./liangshuzu_zhongweishu.sh [2,4,7,6,7,4] [111]
6
[root@localhost leetcode]# ./liangshuzu_zhongweishu.sh [3,4] [1,2]
2.5

脚本解析:

1、第一步将位置变量转换为纯数字,并安顺序排列到一个临时文档中

2、根据数组元素个数,判断选取临时文件中的哪一个数字,如果数组元素个数为偶数,则需要进行一些运算;如果为奇数,则只需输出对应行的参数即可

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值