日常记录
记录看资料时发现的一些方法
小万是个小趴菜
只希望自己->日富一日,年富一年
展开
-
提取不重复的整数
描述输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。保证输入的整数最后一位不是 0 。数据范围: 1 <= n <= 10^8输入描述:输入一个int型整数输出描述:按照从右向左的阅读顺序,返回一个不含重复数字的新的整数分析:无序不重复,set集合。但是set集合对Integer自然升序排序,所以不能用迭代器遍历set集合Set<Integer> set = new HashSet<>();Scanner sc = n原创 2022-05-25 20:02:35 · 488 阅读 · 0 评论 -
合并表记录
描述数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。提示:0 <= index <= 111111111 <= value <= 100000输入描述:先输入键值对的个数n(1 <= n <= 500)接下来n行每行输入成对的index和value值,以空格隔开输出描述:输出合并后的键值对(多行)分析:第一个接收的值表示一共有几对键值对原创 2022-05-28 08:15:00 · 232 阅读 · 0 评论 -
截取字符串
描述输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出数据范围:字符串长度满足 1 <= n <= 1000 , 1 <= k <= n输入描述:1.输入待截取的字符串2.输入一个正整数k,代表截取的长度输出描述:截取后的字符串分析:直接用substring方法截取或for循环遍历从0到k-1,输出字符串Scanner sc = new Scanner(System.in);String str = sc.next();int n = sc.next原创 2022-05-29 08:00:00 · 275 阅读 · 0 评论 -
取整近似值
描述写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。数据范围:保证输入的数字在 32 位浮点数范围内输入描述:输入一个正浮点数值输出描述:输出该数值的近似整数值分析:从控制台接收一个浮点数,然后进行四舍五入。最容易想到的思路,将这个double类型的数转成字符串,通过split方法将小数点两端分成两部分,然后拿到小数点后的第一位跟5比较,大于5小数点前面的数+1,小于5输出小数点前的数。或者用接收的数减去它对应原创 2022-05-28 08:00:00 · 374 阅读 · 0 评论 -
质数因子,不去重
描述功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )数据范围: 1 < n < 2 * 10^9+ 14输入描述:输入一个整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。...原创 2022-05-27 08:15:00 · 482 阅读 · 0 评论 -
进制转换,16转10
描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。数据范围:保证结果在 1 < n < 2^31-1输入描述:输入一个十六进制的数值字符串。输出描述:输出该数值的十进制字符串。Scanner sc = new Scanner(System.in);String str = sc.next();String real = str.substring(2);Map<Character,Integer> map = new HashMap<>(原创 2022-05-27 08:00:00 · 303 阅读 · 0 评论 -
字符串分隔
描述•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(每个字符串长度小于等于100)输出描述:依次输出所有分割后的长度为8的新字符串分析:字符串可以包含空格,当字符串长度小于8且不是空字符串,那么补0;当字符串长度等于8或空字符串,不做操作;当字符串长度大于8,那么前8位截取,剩下的长度继续判断。String类提供了一个substring的方法,参数1位时表示去掉前几位,返回后面的字符串;参数为2原创 2022-05-26 08:15:00 · 169 阅读 · 0 评论 -
明明的随机数
描述明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。数据范围: 1 <= n <=1000 \1≤n≤1000 ,输入的数字大小满足 1 <= val <= 500输入描述:第一行先输入随机整数的个数 N 。 接下来的 N 行每行输入一个整数,代表明明生成的随机数。 具体格式可以参考下面的"示例"。输出描述:输出多行,表示输入数据处理后的结果...原创 2022-05-26 08:00:00 · 571 阅读 · 0 评论 -
计算某字符出现次数
描述写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)数据范围: 1 \le n \le 1000 \1≤n≤1000输入描述:第一行输入一个由字母和数字以及空格组成的字符串,第二行输入一个字符。输出描述:输出输入字符串中含有该字符的个数。(不区分大小写字母)题目分析:输入一个字符,这个字符你不确定是数字还是空格还是字母,所以字符串和字符都用nextLine来接收。一、将字符串和字符全部转换为大/小写,for循环遍历字原创 2022-05-25 11:00:48 · 930 阅读 · 0 评论 -
字符串最后一个单词的长度
题目:计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)输入描述:输入一行,代表要计算的字符串,非空,长度小于5000。输出描述:输出一个整数,表示输入字符串最后一个单词的长度。分析:输入一个字符串,字符串的结尾不是空格,中间或开头可能会出现空格,那么测试用例可以考虑为:1、空格XCD2、空格CC空格vv3、XCV4、xcv空格CVF一般用Scanner接收从控制台输入的数据,因为本题要求的是字符串,Scanner自带的方法接收后原创 2022-05-24 14:54:26 · 348 阅读 · 0 评论 -
输入n个整数,输出其中最小的k个
描述输入n个整数,找出其中最小的k个整数并按升序输出本题有多组输入样例数据范围:1 <= n <= 1000,输入的整数满足 1 <= val<= 10000输入描述:第一行输入两个整数n和k第二行输入一个整数数组输出描述:从小到大输出最小的k个整数,用空格分开。分析:题目中两个要点,一组数据,有序,可重复,所以用list集合或者你用string接收控制台输入的数组后,将其转换为int数组(或直接用int数组接收),然后调用Arrays.sort方法进行排序,然后输原创 2022-05-29 08:15:00 · 1075 阅读 · 0 评论 -
输入整型数组和排序标识,对元素按照升序或降序进行排序
描述输入整型数组和排序标识,对其元素按照升序或降序进行排序数据范围: 1 <= n <= 1000 ,元素大小满足 0 <= val <=100000输入描述:第一行输入数组元素个数第二行输入待排序的数组,每个数用空格隔开第三行输入一个整数0或1。0代表升序排序,1代表降序排序输出描述:输出排好序的数字分析:先用int数组接收待排序的数组,调用sort方法升序排序,如果标识为0则不做改变,标识为1,将数组转换为字符串,调用reverse方法或者,升序不改变降序反向原创 2022-05-30 08:00:00 · 974 阅读 · 0 评论 -
迭代器iterator遍历集合
集合分为list、set和map。list排列有序,可重复;set排列无序,不可重复;map键不可重复,值可重复,排列无序。一般遍历用for循环,但是set和map无序,所以要用迭代器。迭代器是将数据放在一个容器中,并排成一排,迭代器有一个游标,再未遍历之前,这个游标放在第一位元素的前面,一般是迭代器iterator.hasNext判断游标后面是否有元素,iterator.next是将游标向后移一位。list集合分为ArrayList、vector、LinkedListArrayList:排列有序,原创 2022-05-25 11:52:59 · 13652 阅读 · 2 评论 -
java基础面试题,用其他方法改变main类的局部变量
题目:定义一个方法,调用这个方法改变其他方法中的局部变量import java.io.PrintStream;public class Demo { public static void main(String[] args) { int a = 10; int b = 10; // 需要在method方法被调用之后,仅打印出 a = 100,b = 200,请写出method方法的代码 method(a,b);原创 2021-12-13 21:50:32 · 371 阅读 · 0 评论 -
逆序对问题,Java实现
题目:在一个数组中,左边的数比右边的数大,那么这两个数构成一个逆序对,求下列数组中有几个逆序对eg:[1,3,4,2,5]逆序对:【3,2】【4,2】方法一:暴力枚举嵌套for循环,找左边的数比这个数大的个数方法二:分治public class demo { public static void main(String[] args) { int[] nums = {5, 3, 1, 2, 6}; int start = 0; int en原创 2021-12-13 16:11:16 · 353 阅读 · 0 评论 -
小和问题,Java实现
题目:给你一个数组,请输出这个数组中的小和是多少?小和:在一个数组中,每一个数的左边的数比当前数小的数累加起来eg:[1,3,4,2,5]比1小:无比3小:1比4小:1,3比2小:1比5小:1,3,4,2小和:1+1+3+1+1+3+4+2=16方法一:暴力枚举public class demo { public static void main(String[] args) { int[] nums = {5,3,1,2,6}; int sum原创 2021-12-13 14:56:26 · 459 阅读 · 0 评论 -
07_归并排序,Java实现
归并排序的原理:将数据一分为2,一直分到不可再分,定义2个指针,两两排序,直到左右两边都有序,原创 2021-12-11 09:54:04 · 111 阅读 · 0 评论 -
06_递归方法,找数组中的最大值,及递归算法分析,Java实现
递归:自己调自己什么时候用递归?将一堆数组分成左右两部分的时候用递归,这两部分又继续分。或者说,递归是当你将一个母问题分成几个子问题才使用,一般情况下是分成两个部分。递归的时间复杂度求法:递归满足:T(n)=a*T(n/b)+O(nd)a:调用了几次子问题b:将母问题分成几个子问题d:除了子问题调用之外剩下的过程的时间复杂度递归时间复杂度:若logba<d,则O(Nd)若logba==d,则O(Nd*logN)若logba>d,则O(Nx), x=logba用递归方法找原创 2021-12-08 21:38:05 · 548 阅读 · 0 评论 -
数组反转,Java实现
public class ArrayTest{ public static void main(String[] args){ String arr[] = new String[]{"AA","BB","CC","DD","EE","FF","GG"}; /* arr.length/2得到的是偏向中间值左边的数, 若数组长度为奇数,则左边部分比右边部分长度少1 若数组长度为偶数,则两边长度相等 *原创 2021-12-08 17:10:12 · 736 阅读 · 0 评论 -
Java实现,复制一个数组,新数组和原数组不是同一个地址
public class demo { public static void main(String[] args) { //定义两个一维数组 int[] array1,array2; //初始化array1 array1 = new int[]{2, 3, 5, 7, 11, 13, 17, 19}; //显示array1 System.out.println("输出array1");原创 2021-12-08 16:49:28 · 437 阅读 · 0 评论 -
二维数组扩容之后添加元素出现空指针异常的处理方法
import java.util.Arrays;public class demo { public static void main(String[] args) { //随便定义一个二维数组 String[][] arr = new String[1][5]; //给二维数组赋值 arr[0][0] = arr[0][1] = arr[0][2] = arr[0][3] = arr[0][4] = "1"; //打印出原创 2021-12-08 16:26:09 · 535 阅读 · 0 评论 -
输入年月日判断是当年的第几天(用switch实现)
题目:键盘输入年月日,判断是当年的第几天思路分析:原创 2021-12-03 08:52:43 · 2540 阅读 · 0 评论 -
输入一个正整数,将其分解质因数。例如:输入90,打印出90=2*3*3*5。
题目:输入一个正整数,将其分解质因数。例如:输入90,打印出90=233*5。分析:定义一个变量i为2,任何一个数的因数都是从最小的2开始慢慢递增到自身。如果n对2取余为0,说明整除了,那么2就是其中的一个因数,因为循环有自带的迭代++,所以i的值要重新定义为1代码:import java.util.Scanner;public class demo { public static void main(String[] args) { Scanner sc = new S原创 2021-12-03 08:52:18 · 2706 阅读 · 0 评论 -
打印出所有的“水仙花数“,所谓“水仙花数“是指一个三位数,其各位数字立方和等于该数本身。Java实现
题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。代码:public class demo { public static void main(String[] args) { // 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。 for(int i=100;i<1000;i++){// 个位 int endInde原创 2021-12-03 08:51:13 · 375 阅读 · 0 评论 -
05_二分之局部最小问题
题目:在一堆数据中,找到一个局部最小,这堆数据无序,相邻一定不相等局部最小:如果坐标0比坐标1所对应的值小,那坐标0对应的值就是一个局部最小;如果坐标N-1比坐标N-2所对应的值小,那么坐标N-1对应的值就是一个局部最小;如果坐标0和坐标N-1都不满足局部最小,那么在这个无序、相邻一定不相等的数组中一定存在至少一个局部最小import java.util.Scanner;/** * 二分查找局部最小 */public class Demo { public static void ma原创 2021-12-03 08:48:50 · 103 阅读 · 0 评论 -
04_二分查找之在有序的数组中找某个数是否存在以及分析二分查找的时间复杂度
原理:将一个数组分为两个部分,然后比较中间值跟目标值的大小,若中间值大于目标值,则将左边部分继续分为两个部分,找到新的中间值,让中间值跟目标值进行比较……以此类推代码:原创 2021-12-03 08:47:49 · 421 阅读 · 0 评论 -
判断101-200之间有多少个素数,并输出所有素数。Java实现
判断101-200之间有多少个素数,并输出所有素数。代码:public class demo { public static void main(String[] args) {// 判断101-200之间有多少个素数,并输出所有素数。// 因为素数只能被自己整除,所以素数一定是奇数,用得到的数除以3到sqrt,如果都不能被整除,就是素数 for (int i = 101; i < 200; i++) { if原创 2021-12-02 21:07:12 · 2242 阅读 · 0 评论 -
求出1-100之间偶数和、奇数和,并分别记录奇偶数的个数,Java实现
题目:求出1-100之间偶数和、奇数和,并分别记录奇偶数的个数代码:public class demo { public static void main(String[] args) {// 求出1-100之间偶数和、奇数和,并分别记录奇偶数的个数 //定义奇偶数的计数器 int oddCount = 0; int evenCount = 0;// 定义奇偶数的总和 int oddSum = 0原创 2021-12-02 20:32:37 · 1127 阅读 · 0 评论 -
最小公倍数和最大公约数,Java实现
题目:从键盘输入两个整数,输出它们的最大公约数和最小公倍数代码:import com.sun.org.apache.xpath.internal.objects.XString;import java.util.Scanner;public class demo { public static void main(String[] args) {// 求最大公约数和最小公倍数 Scanner sc = new Scanner(System.in);原创 2021-12-02 20:24:04 · 920 阅读 · 0 评论 -
03_插入排序
插入排序原理:从坐标1开始向前比较,如果坐标1比坐标0大/小,交换,从坐标2向前比较,若坐标2比坐标1大/小,交换,此时,坐标1的值是坐标2的值,若坐标1比坐标0大/小,交换,直到出现此坐标比前一个坐标小/大,不满足条件,停止交换……以此类推。每次循环都会排好一部分,第一次循环排好0-1位置的序列,第二次是0-2,第三次是0-3……我们可以把插入排序理解为打扑克牌,当我们拿到新的扑克牌a,会将a跟手中的牌进行比较,从右往左比较,找到相应的位置,把扑克牌插入进去即可。代码:public class de原创 2021-12-02 10:12:41 · 69 阅读 · 0 评论 -
02_冒泡排序
冒泡排序原理:坐标0和坐标1的互相比较,谁小/大谁在前,然后坐标1和坐标2开始比较,以此类推……/** * 从大到小排列 */public class Demo { public static void main(String[] args) { int[] nums = {3, 6, 4, 8, 9, 1, 3, 5}; bubbleSort(nums); for (int i = 0; i < nums.length; i++) {原创 2021-12-01 22:54:17 · 506 阅读 · 0 评论 -
01_选择排序
选择排序原理:遍历数组,选择其中的最大/小的元素,放在数组的第一个位置,然后继续遍历数组,选择第二大/小的元素,放在第二个位置……以此类推public class demo { public static void main(String[] args) { int[] nums = {3, 6, 4, 8, 9, 1, 3, 5}; selectSort(nums);// 输出一下看是否正确 for (int i = 0; i &原创 2021-12-01 17:26:30 · 78 阅读 · 0 评论 -
按位异或运算
按位异或运算:相同为0不同为1,可以理解为无进位加法运算异或 ^ 的性质:0 ^ N = N N ^ N =0 (这里的N指任意的一个整体)满足交换律和结合律。a ^ b = b ^ a(a ^ b) ^ c = a ^ (b ^ c)在一堆数据中,只要这些数据不变,不管内部谁与谁先异或,最终结果是一致的(这个性质是由性质1和性质2推出来的)用异或运算进行两个变量交换位置int a = 12;int b = 17;a = a ^ b;b = a ^ b;//a = a ^ b原创 2021-12-01 16:25:23 · 1228 阅读 · 0 评论 -
交换两个变量的位置,三个方法,Java语言实现
交换两个变量的位置,三个方法,Java语言实现今天学习Java基础的时候,交换两个变量的位置我们一般常用temp来进行交换,下面记录三种方法。int m=3 ,n=5;//第一种:利用一个临时变量temp来存储要交换的变量int temp;temp=m;m=n;n=temp;System.out.println(m +"\t"+n);//利用算数运算符m=m+n;//n=(m+n)-n,这里的m,n是指未交换之前的n=m-n;//此时,n的值就是原先的m//m=(m+n)-m,原创 2021-11-30 21:47:40 · 1229 阅读 · 0 评论