牛客NC413 两个升序数组的中位数【hard 数组,模拟 Java、Go、PHP】

题目

题目链接:

https://www.nowcoder.com/practice/b3b59248e61f499482eaba636305474b

思路

复制代码
	直接模拟2个数组有顺序放到一个数组中help中
	如果help长度为奇数,返回中间的数
	如果help长度为偶数,返回中间2个数的和除以2

参考答案java

java 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums1 int整型ArrayList
     * @param nums2 int整型ArrayList
     * @return double浮点型
     */
    public double Median (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        int n = nums1.size();
        int m = nums2.size();
        int len = n + m;
        int[] help = new int[len];
        int x = n - 1;
        int y = m - 1;
        int z = len - 1;
        while (x >= 0 && y >= 0) {
            if (nums1.get(x) > nums2.get(y)) {
                help[z--] = nums1.get(x--);
            } else {
                help[z--] = nums2.get(y--);
            }
        }

        while (x >= 0) {
            help[z--] = nums1.get(x--);
        }

        while (y >= 0) {
            help[z--] = nums2.get(y--);
        }

        if (len % 2 == 1) {
            int i1 = (len - 1) / 2;
            return (double) help[i1];
        } else {
            int i1 = (len - 1) / 2;
            int i2 = i1 + 1;
            return ((double) help[i1] + (double) help[i2]) / 2;
        }
    }
}

参考答案Go

go 复制代码
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums1 int整型一维数组
 * @param nums2 int整型一维数组
 * @return double浮点型
 */
func Median(nums1 []int, nums2 []int) float64 {
	n := len(nums1)
	m := len(nums2)

	length := n + m

	help := make([]float64, length)
	x := n - 1
	y := m - 1
	z := length - 1
	for x >= 0 && y >= 0 {
		if nums1[x] >= nums2[y] {
			help[z] = float64(nums1[x])
			z--
			x--
		} else {
			help[z] = float64(nums2[y])
			z--
			y--
		}
	}

	for x >= 0 {
		help[z] = float64(nums1[x])
		z--
		x--
	}

	for y >= 0 {
		help[z] = float64(nums2[y])
		z--
		y--
	}

	if length%2 == 1 {
		return help[(length-1)/2]
	} else {
		i1 := (length - 1) / 2
		i2 := i1 + 1

		return (help[i1] + help[i2]) / 2
	}
}

参考答案PHP

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param nums1 int整型一维数组
 * @param nums2 int整型一维数组
 * @return double浮点型
 */
function Median( $nums1 ,  $nums2 )
{
      $n = count($nums1);
    $m= count($nums2);
    $len = $n+$m;
    $help = array();

    $x = $n-1;
    $y = $m-1;
    $z = $len-1;
    while ($x >=0 && $y>=0){
        if($nums1[$x] >$nums2[$y]){
            $help[$z--] = $nums1[$x--];
        }else{
            $help[$z--] = $nums2[$y--];
        }
    }

    while ($x>=0){
        $help[$z--]= $nums1[$x--];
    }

    while ($y>=0){
        $help[$z--] = $nums2[$y--];
    }

    if($len%2 ==1){
        return $help[intval(($len-1)/2)];
    }else{
        $i1 = intval(($len-1)/2);
        $i2 =$i1+1;
        return ($help[$i1]+$help[$i2])/2;
    }
}
相关推荐
一条大祥脚6 分钟前
26.1.26 扫描线+数论|因子反演+子序列计数|树套树优化最短路
数据结构·算法
m0_561359679 分钟前
基于C++的机器学习库开发
开发语言·c++·算法
星空露珠16 分钟前
速算24点所有题库公式
开发语言·数据库·算法·游戏·lua
2401_8324027517 分钟前
C++中的类型擦除技术
开发语言·c++·算法
努力学习的小廉25 分钟前
我爱学算法之—— 递归回溯综合(二)
开发语言·算法
sheji526127 分钟前
JSP基于信息安全的读书网站79f9s--程序+源码+数据库+调试部署+开发环境
java·开发语言·数据库·算法
2301_7634724627 分钟前
C++网络编程(Boost.Asio)
开发语言·c++·算法
依依yyy32 分钟前
沪深300指数收益率波动性分析与预测——基于ARMA-GARCH模型
人工智能·算法·机器学习
hcnaisd21 小时前
深入理解C++内存模型
开发语言·c++·算法
李老师讲编程1 小时前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛