当前位置: 首页 > news >正文

华为OD机试 - 用连续自然数之和来表达整数 - 滑动窗口(Java 2023 B卷 100分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

一个整数可以由连续的自然数之和来表示给定一个整数,计算该整数有几种连续自然数之和的表达式,且打印出每种表达式。

二、输入描述

一个目标整数T(1<=T<=1000)

三、输出描述

该整数的所有表达式和表达式的个数。如果有多种表达式,输出要求为:

自然数个数最少的表达式优先输出

每个表达式中按自然数递增的顺序输出,具体的格式参见样例。

在每个测试数据结束时,输出一行”Result:X”,其中X是最终的表达式个数。

用例:

1、输入

9

2、输出

9=9
9=4+5
9=2+3+4
Result:3

四、解题思路

  1. 输入目标整数T;
  2. 定义存储符合要求的数组集合arrList;
  3. 定义sum,计算窗口之和;
  4. 如果窗口之和大于目标t,left指针右移;
  5. 如果窗口之和等于目标t,表示获取到合适窗口;
    • left指针右移,继续探索新窗口;
    • 如果right指针超出范围,break;
    • right指针右移,继续探索新窗口;
  6. 如果窗口之和小于目标t,right指针右移;
  7. 按照自然数个数升序排序,自然数个数最少的表达式优先输出;
  8. 按照指定格式输出。

五、Java算法源码

public static void main(String[] args) {Scanner sc = new Scanner(System.in);// 目标整数Tint t = sc.nextInt();int[] arr = new int[t];for (int i = 0; i < t; i++) {arr[i] = i + 1;}// 符合要求的数组集合List<int[]> arrList = new ArrayList<>();int left = 0;int right = 1;// 计算窗口之和int sum = arr[left];// 滑动窗口while (left < t) {// 如果窗口之和大于目标t,left指针右移if (sum > t) {sum -= arr[left++];} else if (sum == t) {// 如果窗口之和等于目标t,表示获取到合适窗口int[] oks = Arrays.copyOfRange(arr, left, right);arrList.add(oks);// left指针右移,继续探索新窗口sum -= arr[left++];// 如果right指针超出范围,breakif (right >= t) {break;}// right指针右移,继续探索新窗口sum += arr[right++];} else {// 如果窗口之和小于目标t,right指针右移sum += arr[right++];}}// 按照自然数个数升序排序,自然数个数最少的表达式优先输出arrList.sort((x, y) -> x.length - y.length);// 按照指定格式输出for (int[] array : arrList) {StringJoiner stringJoiner = new StringJoiner("+");for (int i : array) {stringJoiner.add(String.valueOf(i));}System.out.println(t + "=" + stringJoiner);}System.out.println("Result:" + arrList.size());
}

六、效果展示

1、输入

100

2、输出

100=100
100=18+19+20+21+22
100=9+10+11+12+13+14+15+16
Result:3

在这里插入图片描述


🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

http://www.lryc.cn/news/189779.html

相关文章:

  • 玩转ChatGPT:图像识别(vol. 1)
  • oracle 数据库实验三
  • 多线程并发篇---第五篇
  • java实现权重随机获取值或对象
  • 期权账户怎么开通的?佣金最低多少?
  • MySQL(存储过程,store procedure)——存储过程的前世今生 MySQL存储过程体验 MybatisPlus中使用存储过程
  • 如何建立线上线下相结合的数字化新零售体系?
  • python:xlwings 操作 Excel 加入图片
  • 关于hive的时间戳
  • win10 wsl安装步骤
  • 深入理解Spring Boot AOP:切面编程的优势与应用
  • 使用大模型提效程序员工作
  • 如何应对量化交易,个人股票账户如何实现量化程序化自动交易
  • milvus测试
  • antd 表格getCheckboxProps禁用
  • 京东商品列表数据接口,关键词搜索京东商品数据接口
  • Vue使用BMapGL,及marker简单使用
  • WuThreat身份安全云-TVD每日漏洞情报-2023-10-10
  • BSCI认证是谁来验厂?
  • Java中如何在两个线程间共享数据
  • 4、在 CentOS 8 系统上安装 pgAdmin 4
  • 【数字人】3、LIA | 使用隐式空间来实现视频驱动单张图数字人生成(ICLR 2022)
  • 深度学习基础知识 最近邻插值法、双线性插值法、双三次插值算法
  • 计算机竞赛 : 题目:基于深度学习的水果识别 设计 开题 技术
  • 【2023美团后端-8】删除字符串的方案,限制不能连续删
  • 蓝桥等考Python组别十七级008
  • docker安装sql-server数据库,使用navicat实现备份数据库导入
  • 深度学习batch、batch_size、epoch、iteration以及小样本中episode、support set、query set关系
  • Air001 TIM1高级定时器单脉冲输出模式使用
  • 矿机生意难做,比特大陆停发工资