【刷题】Java日常刷题1

A.Sort the Subarray

题意:给出一个数组,一个在此基础上被操作过的数组,找出被操作过的最长的非递减连续序列。

题解:这道题最开始写就被给的样例迷惑了,给出的样例都是被操作过出现非递减序列的片段,因此我就直接去看第二个数组,找它的最长非递减连续序列了。但是题意中还有提到一层意思,如果找出的非递减序列没被操作过,就不能作为答案。所以不能但看第二个数组,还要比对第一个数组找出被操作的地方,再找其中的最长非递减序列。

代码:

import java.util.ArrayList;
import java.util.Scanner;

public class A {
	public static void main(String []args) {
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		int tt=0;
		while(t>0) {
			t--;
			tt++;
			int n = cin.nextInt();
			ArrayList<Integer> a = new ArrayList();
			ArrayList<Integer> b = new ArrayList();
			for(int i=0; i<n; i++) {
				int x = cin.nextInt();
				a.add(x);
			}
			for(int i=0; i<n; i++) {
				int x = cin.nextInt();
				b.add(x);
			}
			if(tt==23) {
				System.out.println(n);
				for(int i=0;i<n;i++)System.out.println(a.get(i)+" "+b.get(i));
				break;
			}
			int l=-1,r=-1;
			int ll=-1,rr=-1;
			int flag=0,cnt=0,ans=0;
			for(int i=0; i<n-1; i++) {
				int aa = b.get(i);
				int bb = b.get(i+1);
				if(aa <= bb) {
					cnt++;
					if(a.get(i)!=b.get(i)) {
						flag=1;
					}
					if(cnt==1) {
						l=i+1;
					}
					if(i==n-2) {
						if(cnt>ans && flag==1) {
							ll = l;
							rr = i+2;
							ans=cnt;
						}
					}
				}else if(aa > bb){
					if(cnt>ans && flag==1) {
						ll = l;
						rr = i+1;
						ans=cnt;
					}
//					System.out.println(aa+ " " + bb + " " +ll + " " + rr);
					cnt=0;
					flag=0;
				}
				
			}
			System.out.println(ll + " " + rr);
		}
	}

}

B.Tear It Apart

题意:对给出的字符串进行k次删除操作,每次操作删掉n个不相邻的字符,使得最后只剩下一种字母。求k的最小次数。

题解:这里我先找出给出字符串中出现过的字符,然后根据出现过的字符来找出它和它下一次出现时中间其他字符的个数,找出最大值就能求出留下这个字符所需操作的最小次数。然后依次将字符串中所有字符遍历。

代码:

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class B {
	public static void main(String []args) {
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		while(t>0) {
			t--;
			String s = cin.next();
			int len = s.length();
			Map<Character,Integer> mp = new HashMap<>();
			int []p = new int[10005];
			for(char i:s.toCharArray()) {
				if(mp.containsKey(i)){ //key存在
	                Integer value = mp.get(i);
	                value++;
	                mp.put(i,value);
	            }else{ //key不存在
	                mp.put(i,1);
	            }
			}
			int minn=Integer.MAX_VALUE,cnt=0,sum=0;
			Character ms = new Character('a');
			for(Character key: mp.keySet()) {
				Integer val = mp.get(key); //出现次数
//				System.out.println(key + ": " + val);
				cnt=0;
				for(int i=0; i<len; i++) {
	//				System.out.println(s.charAt(i) +"  " + ms);
					if(s.charAt(i)==key){
						cnt=0;
		            }else{ 
		                cnt++; 
		            }
//					System.out.println(s.charAt(i) +"  " + cnt);
					sum = Math.max(sum, cnt);
				}
				cnt=0;
				while(sum>0) {
					if(sum%2==1) {
						sum = (sum-1)/2; 
						cnt++;
					}else {
						sum /= 2;
						cnt++;
					}
				}
				minn = Math.min(cnt, minn);
			}
			System.out.println(minn);
		}
		cin.close();
	}
}

C.Yura's New Name

题意:^^或者^_^是笑脸,每次只能插入一个^或者_,求最小插入次数。

题解:先遍历中间连续的_,连续n个则中间插入n-1个^,特判第一个和最后一个,还要特判一下只有一个字符的时候。

代码:

import java.util.Scanner;

public class C {
	public static void main(String []args) {
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		while(t>0) {
			t--;
			String s = cin.next();
			int len = s.length();
			int cnt=0,k=0;
			if(len==1) {
				if(s.charAt(0)=='^') {
					cnt=1;
				}else if(s.charAt(0)=='_') {
					cnt=2;
				}
			}else if(len==2 && s.charAt(0)=='_' && s.charAt(1)=='_'){
				cnt=3;
			}else {
				for(int i=1; i<len-2; i++) {
					if(s.charAt(i)=='_' && s.charAt(i+1)=='_') {
						k++;
					}else if(s.charAt(i)=='_' && s.charAt(i+1)=='^') {
						cnt+=k;
						k=0;
					}
				}
				cnt+=k;
//				System.out.println(cnt);
				if(s.charAt(0)=='_') {
					if(s.charAt(1)=='^') {
						cnt++;
					}else {
						cnt+=2;
//						System.out.println("****");
					}
				}
				if(s.charAt(len-1)=='_') {
					if(s.charAt(len-2)=='^') {
						cnt++;
					}else {
						cnt+=2;
//						System.out.println("++++");
					}
				}
			}
			System.out.println(cnt);
		}
	}
}

F.Li Hua and Maze

题意:划掉最少的点,使得给出的起始位置走不到终点。

题解:特判四个点和除去点以外的边需要的点。

代码:

import java.util.Scanner;

// F - Li Hua and Maze
public class F {
	public static void main(String []args) {
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		while(t>0) {
			int n = cin.nextInt();
			int m = cin.nextInt();
			int x1 = cin.nextInt();
			int y1 = cin.nextInt();
			int x2 = cin.nextInt();
			int y2 = cin.nextInt();
			int cnt=0;
			if((x1==1 && y1==1) || (x1==n && y1==1) || (x1==1 && y1==m) || (x1==n && y1==m)) {
				cnt=2;
			}else if((x2==1 && y2==1) || (x2==n && y2==1) || (x2==1 && y2==m) || (x2==n && y2==m)) {
				cnt=2;
			}else if((x1==1 && y1!=1 && y1!=m) || (x2==1 && y2!=1 && y2!=m)) {
				cnt=3;
			}else if((y1==1 && x1!=1 && x1!=n) || (y2==1 && x2!=1 && x2!=n)) {
				cnt=3;
			}else if((x1==n && y1!=1 && y1!=m) || (x2==n && y2!=1 && y2!=m)) {
				cnt=3;
			}else if((y1==m && x1!=1 && x1!=n) || (y2==m && x2!=1 && x2!=n)) {
				cnt=3;
			}else if(x1!=1 && x2!=1 && y1!=1 && y2!=1) {
				cnt=4;
			}
			System.out.println(cnt);
			t--;
		}
		cin.close();
		return ;
	}
}

G.Li Hua and Pattern

题意:给出长度为n的数组,可以做出k个操作,将二维数组翻转180°让它和原来长的一样。

题解:先找出旋转以后与原来颜色不一样的个数cnt,每次操作可以换一个颜色k-1。

如果k<cnt的话,显然长的不一样。

如果k>=cnt时,k为奇数则分为两种情况:

1. n为奇数时,则k可以变换最中间的点,那么对称。

2. n为偶数时,则不能满足题意,怎么变都不一样。

k为偶数则怎么变都满足题意。

代码:

import java.util.Scanner;

public class G {
	public static void main(String []args) {
		Scanner cin = new Scanner(System.in);
		int t = cin.nextInt();
		while(t>0) {
			t--;
			int n = cin.nextInt();
			int k = cin.nextInt();
			int [][]a = new int[1005][1005];
			for(int i=0; i<n; i++) {
				for(int j=0; j<n; j++) {
					int x = cin.nextInt();
					a[i][j] = x;
				}
			}
			int cnt=0;
			for(int i=0; i<n; i++) {
				for(int j=0; j<n; j++) {
//					System.out.println(a[i][j] + " " + a[n-i-1][n-j-1]);
					if(a[i][j] != a[n-i-1][n-j-1]) {
						cnt++;
					}
				}
			}
//			System.out.println(cnt);
			cnt /= 2;
			int flag=1;
			if(k>=cnt) {
				int ans = k-cnt;
				if(ans%2!=0 && n%2==0) { 
					flag=0;
				}
			}else {
				flag=0;
			}
			if(flag==0) {
				System.out.println("NO");
			}else {
				System.out.println("YES");
			}
//这样写会时间超限,不能有太多if/else
//			if(k>=cnt) {
//				int ans = k-cnt;
//				if(ans%2==0) { 
//					System.out.println("YES");
//				}else { 
//					if(n%2==0) {
//						System.out.println("NO");
//					}else {
//						System.out.println("YES");
//					}
//				}
//			}else {
//				System.out.println("NO");
//			}
		}
	}
}

J.Playing in a Casino

题意:给出n个长度为m的数组,让求出排列组合后每组根据给出公式求出结果的和。

题解:先找出所有两两一组的结果,然后根据每组顺序套公式求出结果相加。

代码:

扩展:

用 ArrayList 创建动态二维数组:

import java.util.ArrayList;
import java.util.List;

public class I {
	public static void main(String []args) {
		//创建一个二维数组
        List<List<Integer>> re = new ArrayList<List<Integer>>();
        //增加元素
        //添加行
        List<Integer> listRow = new ArrayList<>();
        listRow.add(1);
        listRow.add(3);
        listRow.add(5);
        listRow.add(7);
        listRow.add(9);
        //把行添加到二维数组
        re.add(listRow);

        //添加列
        List<Integer> listColumn = new ArrayList<>();
        listColumn.add(0);
        listColumn.add(2);
        listColumn.add(4);
        listColumn.add(6);
        listColumn.add(8);
        re.add(listColumn);
        System.out.println(re);
  
        for (int i = 0; i < re.size(); i++) {
            for (int j = 0; j < ((ArrayList) re.get(i)).size(); j++) {
                String str = ((ArrayList) re.get(i)).get(j).toString();
                System.out.print(str + " ");
            }
            System.out.println("");
        }
	}
}

输出:

注意:向动态二维数组内添加行,要在第一层循环内定义,保证更新不同的ArrayList,否则就会出现都加到同一行的情况。

错误的:

 

正确的:

 

求一组数两两组合的所有结果:

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Arrays;

public class J {
	public static void main(String []args) {
		List<Integer> mylist = Arrays.asList(1,2,3);
	     //Map<Integer, Integer> mymap = new HashMap<Integer, Integer>();
	     List<String> list = new ArrayList<String>();
	     for(int i=0;i< mylist.size()-1;i++)
	     {
	          for(int j=i+1;j< mylist.size();j++)
	          { 
	                list.add(mylist.get(i)+":"+mylist.get(j));   
	          }
	     }
	     for(int k = 0; k< list.size(); k++)
	     {
	          System.out.println(list.get(k));
	     }
	}
}

输出:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 时代的学习方式: 和文档对话

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…

AlgoC++第五课:基于矩阵的算法实现

目录 基于矩阵的算法实现前言1. 矩阵2. 矩阵求导推导3. 矩阵示例代码3.1 Matrix.hpp3.2 Matrix.cpp3.3 main.cpp3.4 拓展-cblas_sgemm3.5 拓展-LU分解 4. 多元线性回归5. 多元逻辑回归6. 最小二乘法7. 岭回归(L2)8. 多元牛顿法9. 高斯牛顿法10. Levenberg-Marquardt(修正牛顿法…

JavaWeb03(域对象EL表达式JSTL标签)

目录 一.jsp内置对象之域对象 1.1 什么是jsp的内置对象? JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象&#xff0c;这些对象不需要开发人员显式声明即可使用。一共有9个&#xff1a; 分别为request、response、session、application、out、pageContext、confi…

【音视频第16天】详解STUN协议

一个webRTC传输协议搞得自己云里雾里的。现在主动攻克一下。先看看STUN协议。好&#xff0c;我们开始吧 目录 1.讲讲什么是NAT&#xff1f;2.NAT有啥问题&#xff1f;3.四种NAT类型4.STUN Server5.TURN ServerSTUN和TURN的实现&#xff1a;什么是STUN&#xff1f;为什么需要ST…

js特殊对象 - RegExp对象(正则表达式)

1、概述 正则表达式用于定义一些字符串的规则&#xff0c;计算机可以根据正则表达式&#xff0c;来检查一个字符串是否符合规则&#xff0c;获取将字符串中符合规则的内容提取出来。 使用typeof检查正则对象&#xff0c;会返回object。 2、创建正则对象 2.1、使用对象创建 语法…

小程序开发费用估算:如何控制项目成本?

在当今数字化的时代&#xff0c;小程序已经成为了很多企业和个人开展业务的重要手段。小程序的开发需要耗费时间和资源&#xff0c;因此在项目初期&#xff0c;了解预计的开发费用是非常重要的。本文将详细介绍如何估算小程序开发费用以及如何控制项目成本。 小程序开发费用 …

用好Python自然语言工具包-- 实例“基于本地知识库的自动问答”

首先鸣谢thomas-yanxin 本问中示例来自他在GitHub上的开源项目“基于本地知识库的自动问答”&#xff0c;链接如下&#xff1a; thomas-yanxin/LangChain-ChatGLM-Webui: 基于LangChain和ChatGLM-6B的针对本地知识库的自动问答 (github.com) 目录 1. 基础知识&#xff1a; …

第四章——数学知识2

欧拉函数 欧拉函数表示的是1-n中与n互质数的个数。 如1-6中&#xff1a;1&#xff0c;5都和6互质&#xff0c;因此互质数为2 欧拉函数分解质因数后表示为&#xff1a; 互质数个数可表示为 int main() {int n;cin >> n;while(n--){int a;cin >> a;//分解质因数int r…

Spring Bean的作用域及生命周期

目录 前言&#xff1a; Bean的作用域&#xff08;Scope&#xff09; 单例模式 原型模式&#xff08;多例作用域&#xff09; 请求作用域&#xff08;request&#xff09; 会话作用域 全局作用域 网络长连接 Spring执行流程 Bean的生命周期 测试 小结&#xff1a; 前…

面试redis之两大金刚,你懂吗

前言 Redis持久化&#xff0c;一个老掉牙的问题&#xff0c;但是面试官就是喜欢问。这也是我们学Redis必会的一个知识点。Redis作为内存数据库&#xff0c;它工作时&#xff0c;数据都保存在内存里&#xff0c;这也是它为什么很快的一个原因。但存到内存里肯定是有丢数据的风险…

易基因:ChIP-seq等揭示热休克转录因子A1b调控植物高温胁迫响应的分子机制|应激反应

在拟南芥中&#xff0c;热休克转录因子A1b&#xff08;HEAT SHOCK TRANSCRIPTION FACTORA1b&#xff0c;HSFA1b&#xff09;通过影响种子产量来调控对环境胁迫的抗性。HSFA1b是生殖适应性的决定性因素&#xff0c;这种调控机制怎么形成的呢&#xff1f; 2018年&#xff0c;英国…

【微电网_储能】基于启发式状态机策略和线性程序策略优化方法的微电网中的储能研究【给定系统约束和定价的情况下】(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

前端项目代码规范

一、变量与函数的命名&#xff08;变量名和函数名是最好的注释&#xff09; 通常情况下函数小陀峰、类名大陀峰、变量短横线/小陀峰、const全大写单词要表达出正确的语义&#xff0c;如&#xff1a;array类型或其它集合类型用英语复数格式、其它类型不要用复数格式区分函数为功…

【服务器】Linux搭建我的世界服务器 + 公网远程联机教程

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员&#xff0c;2024届电子信息研究生 目录 前言 1. 安装JAVA 2. MCSManager安装 3.局域网访问MCSM 4.创建我的世界服务器 5.局域网联机测试 6.安装cpolar内网穿透 7. 配置公网访问地址 8.远程联机测试 9. 配置固定…

C++ 线程

linux使用线程 在linux使用线程可能出现&#xff0c;在编译时不会报错&#xff0c;但执行出错的问题。 undefined reference to pthread_create这是由于ubuntu平台下调用pthread_create()函数&#xff0c;pthread 库不是 Linux 系统默认的库&#xff0c;连接时需要使用静态库 …

MII、 RMII、 GMII、 RGMII 接口介绍

1、RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持&#xff0c;以太网 MAC 和 PHY 之间有一个接口&#xff0c;常用的接口有MII、 RMII、 GMII、 RGMII 等。 MII&#xff08;Medium Independent Interface&#xff0c; 媒体独立接口&#xff09;&#xff1a; MII 支持…

RabbitMQ之介绍以及安装

1.1 MQ的相关概念 1.1.1 什么是MQ ​ MQ&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互联网架构中&#xff0c;MQ…

移远通信笔试题

限时60分钟 1.下列关于栈叙述正确的是 A A) 栈顶元素最先能被删除 B&#xff09;栈顶元素最后才能被删除 C&#xff09;栈底元素永远不能被删除 D&#xff09;以上三种都不对 在栈中&#xff0c;最后被压入的元素总是在栈顶上方&#xff0c;而栈顶元素总是最先被弹出的元…

理解龙格库塔法基本C程序

先学习龙格-库塔法&#xff1b; 龙格-库塔&#xff0c;Runge-Kutta&#xff0c;该方法用于数值求解微分方程&#xff1b; 其中包括著名的欧拉法&#xff1b; 经典四阶法 该方法主要是在已知方程导数和初值信息&#xff0c;利用计算机仿真时应用&#xff0c;省去求解微分方…

人工智能之配置环境教程一:安装VsCode和Anaconda

人工智能之配置环境教程一&#xff1a;安装VsCode和Anaconda 作者介绍一&#xff0e; 安装VScode编辑器二. 安装Anaconda 作者介绍 孟莉苹&#xff0c;女&#xff0c;西安工程大学电子信息学院&#xff0c;2021级硕士研究生&#xff0c;张宏伟人工智能课题组。 研究方向&#…