给定两个大小为 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、根据数组元素个数,判断选取临时文件中的哪一个数字,如果数组元素个数为偶数,则需要进行一些运算;如果为奇数,则只需输出对应行的参数即可