【刷题】Java日常刷题1

news2024/9/21 3:34:33

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));
	     }
	}
}

输出:

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

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

相关文章

No.049<软考>《(高项)备考大全》【冲刺3】《软考之 119个工具 (1)》

《软考之 119个工具 &#xff08;2&#xff09;》 1.专家判断2.引导技术:3.项目管理信息系统:4.会议:5.分析技术:6.变更控制工具:7.访谈:8.焦点小组会议:9.引导式研讨会:10.群体创新技术:11.群体决策技术:12.问卷调查:13.观察:14.原型法:15.标杆对照:16.系统交互图:17.文件分析…

Django基于大数据的应届生求职系统

背景 科学技术日新月异的如今&#xff0c;计算机在生活各个领域都占有重要的作用&#xff0c;尤其在信息管理方面&#xff0c;在这样的大背景下&#xff0c;学习计算机知识不仅仅是为了掌握一种技能&#xff0c;更重要的是能够让它真正地使用到实践中去&#xff0c;以创新的视…

又是DNA甲基化,孕期母亲的压力会影响儿童健康

产前母亲的生活压力事件与后代神经发育不良相关联。研究人员表示&#xff0c;关联的生物学机制大部分是未知的&#xff0c;但在体内发生的一种化学反应——DNA甲基化&#xff0c;即一个小分子甲基被添加到DNA上——可能起着一定作用。这些发现可为了解胎儿环境如何可能影响神经…

【LeetCode】189. 轮转数组

题目链接&#xff1a;https://leetcode.cn/problems/rotate-array/ &#x1f4d5;题目要求&#xff1a; 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 尽可能想出更多的解决方案&#xff0c;至少有 三种 不同的方法可以…

MTC-PD65W1C-CTA1快充电源-使用MTC-650V Cascode D-GaN

本电源模块是65W单一C界面&#xff0c;其输出电压由协议IC可以控制5V/3A, 9V/3A, 15V/3A, 20V/3.25A等电压输出&#xff0c;使用QR/DCM反驰式电路架构于输出20V重载时可达93%效率及功率密度可达1.5W/cm3&#xff0c;本系统采用同系列控制单晶片&#xff1a;QR一次侧控制IC驱动M…

【云计算•云原生】3.一小时熟练掌握docker容器

文章目录 docker简介ubuntu下安装dockerkali下安装dockerdocker基本命令docker搭建mysql、nginx、redis容器/镜像打包搭建私有镜像仓库docker网络管理Dockerfile文件docker-compose.yml示例&#xff1a;搭建lamp docker简介 docker是一个开源的应用容器引擎&#xff0c;可以让…

软件著作权登记版权保护中心下发补正修改指南

本文为大家介绍常见版权中心下发的补正问题及对应修改方法。 一、补正是什么意思&#xff1f; 补正&#xff0c;即增补订正。 下发补正指版权保护中心发现软件著作权登记材料中存在一些格式/内容上的问题&#xff0c;予以驳回。要求著作权人或代理人依照补正意见内容对材料进…

电影《灌篮高手》观后

上周和同学一起看了电影《灌篮高手》这部电影&#xff0c;个人以前没有看过相关漫画和动画&#xff0c;但记得&#xff0c;看过海报和一些宣传物品&#xff0c;有的衣服上&#xff0c;有文具盒上&#xff0c;也都出现过&#xff0c;而且是在自己小时候&#xff0c;可见当时的影…

(中)苹果有开源,但又怎样呢?

上篇&#xff08;详情请戳&#xff1a;《&#xff08;上&#xff09;苹果有开源&#xff0c;但又怎样呢&#xff1f; 》&#xff09;里说到&#xff0c;苹果首个开源项目 Darwin 的诞生&#xff0c;与乔布斯的复仇归来有着千丝万缕的关系。 作为一个开源的操作系统&#xff0c…

【JAVA】将两个字符串相乘并返回字符串

&#x1f58a;作者 : D. Star. &#x1f4d8;专栏 : Java &#x1f606;今日分享 : 越忙越不能熬夜. —晚安 , 好梦. 将两个字符串相乘并返回字符串 &#x1f33b;前言:✔题目:&#x1f50e;代码详情:1.创建字符创对象:2.将字符串转化为数字:3.数字相乘,并转化为字符串家人们,点…

[C++]——C++基础知识点(C++和C语言的区别)

文章目录 1. 前言2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C的输入输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.2 C支持函数重载的原理——名字修饰 6. 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 引用的使用场景6.5 引用和指针的…

招商基金数字化转型下的研发管理|ONES 客户案例

在 4 月 20 日举行的《中国企业软件研发管理白皮书》发布会上&#xff0c;招商基金信息技术部副总监、研发中心主管刘志昆作了《招商基金数字化转型下的研发管理》主题演讲&#xff0c;从数字化转型背景、研发管理所遇到的挑战出发&#xff0c;讲述招商基金如何摸索出适合自身环…

Pycharm连接MySQL

使用MySQL内置工具&#xff08;命令&#xff09; 创建数据库&#xff1a;unicom 数据表&#xff1a;admin 表名&#xff1a;admin 列&#xff1a;id 整型 自增 主键username 字符串 不为空&#xff0c;password 字符串 不为空&#xff0c;mobile 字符串 不为空 Python代码实…

echarts 象形柱图_矢量图_自定义样式

Echarts 常用各类图表模板配置 注意&#xff1a; 这里主要就是基于各类图表&#xff0c;更多的使用 Echarts 的各类配置项&#xff1b; 以下代码都可以复制到 Echarts 官网&#xff0c;直接预览&#xff1b; 图标模板目录 Echarts 常用各类图表模板配置一、象形柱图二、环形图…

电脑中了勒索病毒,Windows操作系统如何设置才能预防faust勒索病毒攻击?

随着计算机技术的不断发展&#xff0c;勒索病毒的加密程序也有了很大提升&#xff0c;phobos勒索家族也衍生出了各种后缀的勒索病毒&#xff0c;给我们的日常工作生活带来了很大困扰。随着phobos勒索家族的加密程序升级&#xff0c;faust勒索病毒已经成为该家族中较为疯狂的勒索…

BACnet IP通讯方式组网步骤

BACnet IP通讯方式组网步骤 文章目录 BACnet IP通讯方式组网步骤前言一、配置BACnet IP网络参数二、确定DDC控制器和扩展模块的BACnet地址三、配置BACnet对象&#xff1a;四、配置DDC控制器和扩展模块五、测试通信六、实现控制功能七、总结 前言 BACnet IP方式组网的几个优势&…

强烈建议互联网人转战实体和农业,去了就是降维打击!实体太缺人才了,老板也不缺钱!...

大环境不好&#xff0c;互联网人该何去何从&#xff1f; 一位网友提出了一个新思路&#xff1a;强烈建议互联网同学转战实体、农业这些行业。实体真的太缺人才了&#xff0c;目前大部分实体都留下70后、80后在继续奋斗。其实实体老板很多都不缺钱&#xff0c;经过多年积累&…

内外部函数和内存模型

1、函数&#xff08;封装、复用&#xff09; 功能性&#xff1a;最基本的特性&#xff1b; 扩展性&#xff1a;对于时刻变化的需求易于扩展&#xff1b; 维护性&#xff1a;对于时刻变化的需求易于维护&#xff0c;易于编码变更&#xff1b; 封装性&#xff1a;不要把所有的代…

sql优化慢查询

1.慢查询设置 慢查询设置&#xff08;临时&#xff09; -- 查看是否开启了慢查询日志 show variables like slow%;-- 开启慢查询日志 set global slow_query_log on;-- 更改日志路径 set global slow_query_log_file /data/mydata/app1-slow.log;-- 查看慢查询时间临界值&…

学习笔记-主成分分析法

定义 主成分分析是一种降维算法&#xff0c;它能将多个指标转换为少数几个主成分&#xff0c;这些主成分是原始变量的线性组合&#xff0c;且彼此之间互不相关&#xff0c;其能反映出原始数据的大部分信息。一般来说&#xff0c;当研究的问题涉及到多变量且变量之间存…