牛客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;
    }
}
相关推荐
jiao_mrswang1 小时前
leetcode-18-四数之和
算法·leetcode·职场和发展
qystca1 小时前
洛谷 B3637 最长上升子序列 C语言 记忆化搜索->‘正序‘dp
c语言·开发语言·算法
薯条不要番茄酱1 小时前
数据结构-8.Java. 七大排序算法(中篇)
java·开发语言·数据结构·后端·算法·排序算法·intellij-idea
今天吃饺子1 小时前
2024年SCI一区最新改进优化算法——四参数自适应生长优化器,MATLAB代码免费获取...
开发语言·算法·matlab
是阿建吖!1 小时前
【优选算法】二分查找
c++·算法
王燕龙(大卫)1 小时前
leetcode 数组中第k个最大元素
算法·leetcode
不去幼儿园2 小时前
【MARL】深入理解多智能体近端策略优化(MAPPO)算法与调参
人工智能·python·算法·机器学习·强化学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
盼海3 小时前
排序算法(五)--归并排序
数据结构·算法·排序算法
网易独家音乐人Mike Zhou6 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot