首页 > 其他分享 >计算最接近的数

计算最接近的数

时间:2023-09-17 22:01:46浏览次数:21  
标签:数组 int 50 中位数 -- split 计算 接近

题目描述

给定一个数组 X 和 正整数 K,请找出使表达式:

X[i] - X[i+1] - ...... - X[i + K - 1]
结果最接近于数组中位数的下标 `i` , 如果有多个 `i` 满足条件,请返回最大的 `i`

其中,数组中位数:长度为 N 的数组,按照元素的值大小升序排列后,下标为 N/2 元素的值

备注

  1. 数组X的元素均为正整数
  2. X的长度 n 的取值范围:计算最接近的数_数组
  3. 计算最接近的数_中位数_02
  4. 计算最接近的数_数组_03
  5. 题目的排序数组计算最接近的数_i++_04的中位数是 计算最接近的数_数组_05

用例

--输入
[50,50,2,3],2
--输出
1
--说明
1.
--中位数为50: [50,50,2,3]升序排序后变成 [2,3,50,50]
--中位数为下标-> 4/2=2 的元素 50


2.计算结果为1: X [50.50,2,3] 根据题目计算X[i] - ... - X[i + k- 1] 得出三个数

0   (X[O] - X[1] = 50 - 50)
48  (X[1] - X[2] = 50 - 2)
-1  (X[2] - X[3] = 2 - 3)

其中48最接近50,因此返回下标1。

show code

import java.util.Arrays;
import java.util.Scanner;

/**
 * desc :
 * <p>
 * create time : 2023/9/9 16:41
 */
public class CalculateTheClosestNumber {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while(in.hasNextLine()) {
            String line = in.nextLine();

            String[] split = line.split("]");
            String[] split1 = split[0].replace("[", "").split(",");
            int[] X = new int[split1.length];
            for (int i = 0; i < split1.length; i++) {
                X[i] = Integer.parseInt(split1[i]);
            }

            int k = Integer.parseInt(split[1].replace(",", ""));

            //calculateTheClosestNumber(X, k);
            practice(X, k);
        }
    }


    private static void practice(int[] X, int k) {
        int n = X.length;

        // 求数组的中位数.
        int mid = Arrays.stream(X).sorted().toArray()[n/2];

        // 滑动窗口
        int window = X[0];
        for (int i = 1; i < k; i++) {
            window -= X[i];
        }

        // 和中位数的差距.
        int min_diff = Math.abs(mid - window);
        int idx = 0;

        // 滑动窗口右移
        for (int i = 1; i <= n - k; i++) {
            // 右移动一格
            window += 2 * X[i] - X[i - 1] - X[i + k - 1];

            int diff = Math.abs(mid - window);

            if(diff <= min_diff) {
                min_diff = diff;
                idx = i;
            }
        }

        System.out.println(idx);
    }

}

标签:数组,int,50,中位数,--,split,计算,接近
From: https://blog.51cto.com/u_16079703/7504078

相关文章

  • mysql存储与计算地理位置信息
    ●Geometry○Geometry是集合对象的基类,也就是说Point、lineString、polygon都是Geometry的子类●Point○点对象,有一个坐标值,没有长度、面积、边界。数据格式为:经度longitude在前,纬度latitude在后,用空格分割,例如:POINT(116.416352857884139.870942749660706)●LingString......
  • 100031. 计算 K 置位下标对应元素的和-363
    100031.计算K置位下标对应元素的和给你一个下标从0开始的整数数组nums和一个整数k。请你用整数形式返回nums中的特定元素之和,这些特定元素满足:其对应下标的二进制表示中恰存在k个置位。整数的二进制表示中的1就是这个整数的置位。例如,21的二进制表示为10......
  • 计算机网络 基础面试第一弹
    1.DNS解析过程DNS解析(DomainNameSystemResolution)是将域名转换为IP地址的过程。以下是DNS解析的详细过程:发起解析请求:当您在浏览器中输入一个域名时,您的操作系统会发起一个DNS解析请求。该请求被发送到您计算机上配置的本地DNS服务器,通常由您的互联网服务提供商(ISP)提供。......
  • JS计算数组层级(深度)
    如果有一个多层嵌套的数组,想要计算其层级(深度),可以使用递归或迭代方法来实现。以下是两种常用的方法示例:递归方法:functioncalculateDepth(arr){if(!Array.isArray(arr)){return0;//如果不是数组,返回0表示不是层级结构}letmaxDepth=0;for(const......
  • 课后题之计算器
    #include<stdio.h>voidmain(){ //定义两个算术变量,四个运算结果变量 inta,b,sum,sub,mul,mod; doublediv; printf("请输入第一个整数:"); scanf_s("%d",&a); printf("\n"); printf("请输入第二个整数:"); scanf_s("%d",&......
  • 失物招领系统的设计与实现-计算机毕业设计源码+LW文档
    题目的意义、目的:随着互联网的飞速发展,学校也进入了信息化时代。校园中大学生丢失物品的现象较为普遍,虽然目前国内有一些网上校园寻物平台或者是QQ群之类的,但是都不是很成熟,使得失主不能及时甚至找不到失物,给生活带来了极大的不便。通过互联网为在校师生搭建一个发布信息的平台,可......
  • 基于web的客户管理系统-计算机毕业设计源码+LW文档
    一、选题的目的及意义随着商业银行规模的发展,公司业务越来越多,客户和人员的管理也变得越来越困难。在传统的客户管理中,公司往往通过大量的人力和物力进行管理,通过手工记录客户,统计客户订单信息。这种传统的管理方法容易出错,而且不能适应现代化、信息化的发展过程。因此,本基于web的......
  • 基于Python的鲜花在线销售系统-计算机毕业设计源码+LW文档
    摘 要随着信息技术的发展,基于web模式的购物系统逐渐普及,网上购物是一种新型的商务模式,其工作流程和经营模式受到了欢迎。电子商务可以适应现代化快节奏的生活方式,满足各类人群足不出户的在线购物,利用商城使得买卖双方完成线上交易,提高了购买效率。然而像鲜花这种传统的行业,由于......
  • 基于Java Web的陕西旅游网站的设计与实现-计算机毕业设计源码+LW文档
    一、研究的背景和意义研究背景:本文主要是基于旅游业是我国现阶段发展的重要产业,旅游可以推动经济上的发展,通过深入的对当前旅游行业的研究,也随着网络技术的发展,传统的旅游方式游客已经无法满足,游客不再满足于单一路线的线路,无法进行更多的选择,每天日常的行程安排丧失了一定......
  • 计算机视觉算法中的人体动作识别(Human Action Recognition)
    引言人类的动作是一种非常重要的信息来源,它能传达出人们的意图、情感和行为。因此,对于计算机来说,能够准确识别和理解人体动作是一项具有挑战性的任务。计算机视觉领域中的人体动作识别(HumanActionRecognition)旨在从图像或视频中自动识别和解释人体的运动模式和行为。本文将介绍人......