牛客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;
    }
}
相关推荐
算AI10 小时前
人工智能+牙科:临床应用中的几个问题
人工智能·算法
hyshhhh12 小时前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
杉之12 小时前
选择排序笔记
java·算法·排序算法
烂蜻蜓13 小时前
C 语言中的递归:概念、应用与实例解析
c语言·数据结构·算法
OYangxf13 小时前
图论----拓扑排序
算法·图论
我要昵称干什么13 小时前
基于S函数的simulink仿真
人工智能·算法
AndrewHZ13 小时前
【图像处理基石】什么是tone mapping?
图像处理·人工智能·算法·计算机视觉·hdr
念九_ysl13 小时前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
守正出琦13 小时前
日期类的实现
数据结构·c++·算法
ChoSeitaku13 小时前
NO.63十六届蓝桥杯备战|基础算法-⼆分答案|木材加工|砍树|跳石头(C++)
c++·算法·蓝桥杯