【刷题册】2024.10.13 - 2024.10.15

目录

  • 一、2024.10.13
    • 1.1 BC153 [NOIP2010]数字统计
    • 1.2 NC313 两个数组的交集
      • 1.2.1 思路一:暴力O(N^2)
      • 1.2.2 思路二:hash
    • 1.3 AB5 点击消除
  • 二、2024.10.14
    • 2.1 BC64⽜⽜的快递
    • 2.2 DP4 最⼩花费爬楼梯
    • 2.3 数组中两个字符串的最⼩距离
  • 三、2024.10.15
    • 3.1 BC149 简写单词
    • 3.2 dd爱框框
    • 3.3 除2!

一、2024.10.13

1.1 BC153 [NOIP2010]数字统计

题目链接:BC153 [NOIP2010]数字统计
题目描述:

解题思路:

  • 枚举,直接循环对两数字之间的所有数拆分看每个数的含2个数。
  • 拆分方法:数字取余10,看个位数是否为2,然后让数字除10,直到数字小于0为止。

解题代码:

public static void main(String[] args) {//输入Scanner in = new Scanner(System.in);int first = in.nextInt();int last = in.nextInt();int ret = 0;for(int i = first; i <= last; i++) {ret += count(i);}System.out.println(ret);}//记录数中2个数private static int count(int num) {int ret = 0;while(num > 0) {if(num % 10 == 2) ret++;num = num / 10;}return ret;}

1.2 NC313 两个数组的交集

题目链接:NC313 两个数组的交集

题目描述:

题目分析:就是找出两数组的相同元素,且结果数组中元素是不能重复的。

1.2.1 思路一:暴力O(N^2)

直接使用两层for循环,第一个for拿到nums1中的每一个数,与第二个中的所有元素进行比较,相同存入结果数组(注意结果数组中是否已经有了该数,如nums1 = {2,2},nums2 = {2,2})。

解题代码

public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {ArrayList<Integer> ret = new ArrayList<Integer>();for(int i = 0; i < nums1.size(); i++) {Integer cur = nums1.get(i);for( int j = 0; j < nums2.size(); j++) {if(cur.equals( nums2.get(j) )) {//注意排除已经有的值if(!ret.contains(cur)) ret.add(cur);break;}}}return ret;}

1.2.2 思路二:hash

将第一个数组存入hash表中,然后遍历第二个数组看hash表中是否有这个数。
但是由于数据范围是1000,是很小的,我们就不使用集合类HashMap,

直接使用一个布尔数组来表示,

  • 遍历nums1数组,将nums1数组中元素作为布尔数组中true值的下标,其余为false;
  • 在遍历nums2数组,看nums2数组中元素作为下标的布尔数组中只是不是true;
  • 是true就将该元素存入结果数组中,并将布尔数组置为false(防止重复数据)。
public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {boolean[] hash = new boolean[1010];ArrayList<Integer> ret = new ArrayList<Integer>();for(int i = 0; i < nums1.size(); i++) {hash[nums1.get(i)] = true;}for(int i = 0; i < nums2.size(); i++) {if(hash[nums2.get(i)]) {ret.add(nums2.get(i));hash[nums2.get(i)] = false;}}return ret;
}

1.3 AB5 点击消除

题目链接:AB5 点击消除

题目描述:

解题思路:

  • 我们使用栈来模拟操作,拿到一个字母就与栈顶元素比较,相同就出栈,不同就进栈。
  • 但是使用Stack类的话,我们最后拿到的栈顶到栈尾的,toString方法也不行。我们就使用StringBuilder来模拟实现。
public static void main(String[] args) {Scanner in = new Scanner(System.in);String str = in.next();StringBuilder ret = new StringBuilder("");for(int i = 0; i <str.length(); i++) {char ch = str.charAt(i);if(ret.length() != 0 && ch == ret.charAt(ret.length()-1) ) {//出栈ret.deleteCharAt(ret.length()-1);} else {//进栈ret.append(str.charAt(i));}            }//注意判断栈是否为空System.out.println(ret.length() == 0? 0 : ret.toString());}

二、2024.10.14

2.1 BC64⽜⽜的快递

题目链接:BC64 ⽜⽜的快递
题目描述:

题目解析:一道小学数学题,只介绍对小数的处理:

  • 法1:直接调用Math类中的ceil()库方法向上取整;
  • 法2:使用a-(int)a与0进行比较,看是否有小数,有就结果加1。

代码:

//法1:
public static void main(String[] args) {Scanner in = new Scanner(System.in);float a = in.nextFloat();char b = in.next().charAt(0);int ret = 20;if(b == 'y') ret += 5;if(a > 1.0) {ret = ret  - 1 + (int)Math.ceil(a);}System.out.println(ret);
}
//法二:
public static void main(String[] args) {Scanner in = new Scanner(System.in);//输入处理float a = in.nextFloat();String str = in.nextLine();char b = str.charAt(1);int ret = 20;//是否加急if(b == 'y') ret += 5;//是否超出1if(a > 1) {float temp = a - (int)a ;//是否有小数if(temp != 0.0) ret += 1;ret  = ret + (int)a - 1;}System.out.println(ret);
}

2.2 DP4 最⼩花费爬楼梯

题目链接:DP4 最⼩花费爬楼梯

题目描述:

题目分析:
这是一道简单的动态规划题目,看题目给出的实例终点是走出数组。

  • 动态方程 dp[i] = Math.min(dp[i-1] + cost[i-1] , dp[i-2] + cost[i-2]);

代码:

import java.util.*;
class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int[] cost = new int[n];cost[0] = in.nextInt();int[] dp = new int[n+1];for(int i = 2; i <= n; i++) {cost[i-1] = in.nextInt();dp[i] = Math.min(dp[i-1] + cost[i-1], dp[i-2] + cost[i-2]);}System.out.println(dp[n]);}
}

2.3 数组中两个字符串的最⼩距离

链接找不到,下架了
题目描述:

题目解析:
题目给得很明确,在strs数组中找str1和str2之间的最小距离。

解题思路:

  • 法1:使用两层for循环,找到一个str1,就从当前开始找str2,如果结果ret更小,就更新。
  • 法2:对法1的优化,我们只需要使用两个变量flag0和flag1分别表示当前找到的str1和str2的位置,在找到一个str1或者str2的时候与最近的相减(也就是flag1-flag0的绝对值)再与结果ret比较,小就更新。
import java.io.*;
public static void main(String[] args) throws IOException{BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));int len = Integer.parseInt(reader.readLine());String[] strs = reader.readLine().split(" ");String str1 = strs[0], str2 = strs[1];String[] strs = new String[len];for(int i = 0; i < len; i++) strs[i] = in.next();int ret = 0x3f3f3f3f;int flag0 = 0;int flag1 = 0;for(int i = 2; i < len ; i++) {if(strs[i].equals(str1) ) {flag0 = i;}if(strs[i].equals(str2)) {flag1 = i;}if(ret == 0 || ret > Math.abs(flag1 - flag0)) ret =  Math.abs(flag1 - flag0);}if(flag0 == 0 || flag1 == 0) System.out.println(-1);else System.out.println(ret);}

三、2024.10.15

3.1 BC149 简写单词

题目链接: BC149 简写单词
题目描述:

简单题不用解析。
代码:

import java.util.*;
class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);while(in.hasNext()) {char ch = in.next().charAt(0);          System.out.print((ch <= 'z'&& ch >= 'a') ? (char)(ch - 32) : ch);}}
}

3.2 dd爱框框

题目链接:dd爱框框

题目描述:

题目解析:题目要求我们找出最小区间中的数组元素和大于等于x的左右下标值。

解题思路:

  1. 暴力解法:使用两层for循环,一层i代表左下标,第二层j循环从i下标开始去求右下标,找到最小区间长度即可,但是数组长度n的值很大,这样是会超时的。
  2. 对暴力解法优化,滑动窗口/同向双指针:
    2.1. 数组中的数据全是大于1的正数,证明当我们找到一个区间的数是大于x的时候left左指针向后走一位的时候,right–不会出现区间数组和变大的情况。
    2.2 直接使用Scannner由于数据量大,会出现超时,要使用自定义快读类。

代码:

import java.util.StringTokenizer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {public static void main(String[] args) throws IOException {Read in = new Read();int n = in.nextInt();int x = in.nextInt();int[] arr = new int[n+1];for(int i = 1; i <= n; i++) {arr[i] = in.nextInt();}int left = 1, right = 1,sum = 0;int retLeft = 0, retRight = 0, retLen = 0X3f3f3f3f;while(right <= n) {//进窗口sum += arr[right];//更新结果while(sum >= x) {if(retLen > right - left + 1) {retLeft = left;retRight = right;retLen = retRight - retLeft + 1; }//出窗口sum -= arr[left++];}right++;}System.out.println(retLeft + " " + retRight);}
}class Read {StringTokenizer st = new StringTokenizer("");BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {while(!st.hasMoreTokens()) {st = new StringTokenizer(bf.readLine());}return st.nextToken();}int nextInt() throws IOException {return Integer.parseInt(next());}
}

3.3 除2!

题目链接:除2!

题目描述:

题目解析:这道题目就是给你最多k次让偶数除2操作,使最后数组元素和最小。

解题思路:

  • 因为是对偶数除2,并且要让最后数组和尽可能小,那么我们就可以使用大根堆来存储偶数
  • 注意k只是最多可以操作的次数,有可能最后数组中已经没有偶数,而k的次数还没执行完;
  • 我们先将给的数据和加起来,每出一次大根堆就减去,在判断除2后是不是还是偶数,是就进堆。

代码:

import java.util.Scanner;
import java.util.PriorityQueue;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);long n = in.nextLong();int k = in.nextInt();PriorityQueue<Long> heap = new PriorityQueue<>((a,b) -> {return (int)(b - a); });long sum = 0;while(in.hasNextLong()) {long temp = in.nextInt();sum += temp;if(temp % 2 == 0) {heap.add(temp);}}while(!heap.isEmpty() && k > 0) {long temp = heap.poll() / 2;sum -= temp;if(temp % 2 == 0) {heap.add(temp);}k--;}System.out.println(sum);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio Code基础:使用debugpy调试python程序

相关阅读 VS codehttps://blog.csdn.net/weixin_45791458/category_12658212.html?spm1001.2014.3001.5482 一、安装调试器插件 在VS code中可以很轻松地调试Python程序&#xff0c;首先需要安装Python调试器插件&#xff0c;如图1所示。 图1 安装调试器插件 Python Debugge…

Redis --- 第四讲 --- 常用数据结构 --- Hash、List

一、Hash哈希类型的基本介绍。 哈希表&#xff1a;之前学过的所有数据结构中&#xff0c;最最重要的。 1、日常开发中&#xff0c;出场频率非常高。 2、面试中&#xff0c;非常重要的考点。 Redis自身已经是键值对结构了。Redis自身的键值对就是通过哈希的方式来组织的。把…

16年408计算机网络

第一题&#xff1a; 解析&#xff1a; 首先我们要清楚R1,R2,R3是路由器&#xff08;网络层&#xff09;&#xff0c;Switch是以太网交换机&#xff08;数据链路层&#xff09;&#xff0c;Hub是集线器&#xff08;物理层&#xff09;。 由此可见路由器实现的最高功能层是3层&am…

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年&#xff0c;是一款老牌知名的PHP开发集成环境工具&#xff0c;产品历经多次迭代升级&#xff0c;目前有phpStudy经典版、phpStudy V8&#xff08;2019版&#xff09;等等&#xff0c;利用phpstudy可以快速搭建一个mysql环境&#xff0c;接下来我们就开始吧…

【计算机网络 - 基础问题】每日 3 题(三十六)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Java项目:160 基于springboot物流管理系统(PPT+论文+说明文档)

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 物流管理系统有管理员和用户两个角色。 ​ 管理员功能有个人中心&#xff0c;用户管理&#xff0c;车辆信息管理&#xff0c;公告信息管理&#xff…

实现MySQL异地多活场景

作为现代化的互联网企业 &#xff0c;最怕的是什么 &#xff1f;是意外&#xff01;由各种意外导致的数据库问题&#xff0c;磁盘问题、网络问题、人员误操作问题等等&#xff0c;这些问题都可能导致数据不可用或者丢失&#xff0c;造成重大损失。 因此&#xff0c;很少会有企…

运维:winserver服务器添加nginx开机自启动

前言 发现之前做的一版windows开机自启动任务对nginx的启用无效&#xff0c;因此这里给出针对性的配置&#xff0c;以实现winserver服务器添加nginx开机自启动目的。 先前的配置方案&#xff1a;windows部署开机自启动服务_windows 服务中添加自行启动任务-CSDN博客 方案 1、进…

记录一个Ajax发送JSON数据的坑,后端RequestBody接收参数小细节?JSON对象和JSON字符串的区别?

上半部分主要介绍我实际出现的问题&#xff0c;最终下面会有总结。 起因&#xff1a;我想发送post请求的data&#xff0c;但是在浏览器中竟然被搞成了地址栏编码 如图前端发送的ajax请求数据 如图发送的请求体&#xff1a; 很明显是keyvalue这种形式&#xff0c;根本就不是…

基于Java+SpringBoot+Vue的在线文档管理系统的设计与实现

基于JavaSpringBootVue的在线文档管理系统的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&…

【算法题解】二分查找的经典问题解析

文章目录 什么是二分&#xff1f;关于二分的一些题目1.分巧克力解题思路编写代码 2.数组中数值和下标相等的元素3.0到n-1中缺失的数字4.数列分段 II解题思路编写代码 总结 什么是二分&#xff1f; 二分是一种思想&#xff0c;用于有序数组中快速查找目标元素。 用动图展示一下…

信息系统的生命周期

信息系统是面向现实世界人类生产、生活中的具体应用&#xff0c;是为了提高人类活动的质量、效率而存在的。信息系统的目的、性能、内部结构和秩序、外部接口、部件组成等由人来规划&#xff0c;它的产生、建设、运行和完善构成一个循环的过程&#xff0c;这个过程遵循一定的规…

【vue】指令补充+样式绑定+计算属性+侦听器

代码获取 知识总结 ⼀、指令补充 1.指令修饰符 1.1 什么是指令修饰符&#xff1f; 所谓指令修饰符就是让指令的 功能更强⼤&#xff0c;书写更便捷 1.2 分类 1.2.1 按键修饰符 keydown.enter&#xff1a;当enter键按下时触发 keyup.enter&#xff1a;当enter键抬起时触…

Jmeter脚本录制:抓取IOS手机请求包

现在移动端的项目越来越多&#xff0c;今天给大家介绍一下&#xff0c;在IOS下Jmeter如何抓包。 1、电脑连上wifi 2、Jmeter中配置“HTTP代理服务器” 1)启动Jmeter&#xff1b; 2)“测试计划”中添加“线程组”&#xff1b; 3)“测试计划”中添加“HTTP代理服务器”&…

强化学习和QLearning及GAN到底是什么关系啊

强化学习&#xff08;Reinforcement Learning&#xff09;、Q-Learning 和生成对抗网络&#xff08;GANs&#xff09;是机器学习中的三个不同概念&#xff0c;它们虽然有一些交叉&#xff0c;但本质上是针对不同问题的技术方法。下面我来详细解释它们之间的关系和区别&#xff…

Springboot 整合 Java DL4J 实现农产品质量检测系统

&#x1f9d1; 博主简介&#xff1a;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编程&#xff0c;…

图片美化SDK解决方案,赋能H5与小程序极致体验

无论是社交媒体分享、电商产品展示&#xff0c;还是个人日常生活的记录&#xff0c;一张经过精心美化的图片总能瞬间吸引眼球&#xff0c;传递出更加丰富和动人的信息。如何在不增加应用体积、不牺牲用户体验的前提下&#xff0c;为H5页面和小程序提供媲美原生APP的图片美化功能…

微信小程序-自定义组件

文章目录 微信小程序-自定义组件概述创建和使用数据、方法和属性slot 插槽默认插槽具名插槽 组件样式注意项样式隔离 数据监听组件间通信父传子子传父获取子组件实例 生命周期组件的生命周期组件所在页面的生命周期App、Page与Component生命周期对比冷启动保留当前页面和关闭当…

linux源码安装slurm以及mung和openssl

一、源码安装munge 1、编译安装munge &#xff08;1&#xff09;下载munge地址&#xff1a;https://github.com/dun/munge/releases &#xff08;2&#xff09;解压编译安装&#xff1a; 1 2 3 4 5 6 7 8 创建/data目录 复制文件munge-0.5.15.tar.xz 到/data目录下 tar -Jx…

界面耻辱纪念堂--可视元素03

更多的迹象表明&#xff0c;关于在程序里使用新的动态界面元素&#xff0c;微软的态度是不确定的&#xff0c;其中一个是仅仅需要对比一下Office97 里的“Coolbars”和“标准工具条”。Coolbar 按钮直到用户指针通过的时候才成为按钮&#xff08;否则是平的&#xff09;。 工具…