目录
BC153 [NOIP2010]数字统计
▐ 题解
NC313 两个数组的交集
▐ 题解
AB5 点击消除
▐ 题解
BC153 [NOIP2010]数字统计
题目描述:
题目链接: [NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com)
▐ 题解
题目要求统计出某段数组中一共有多少个2,所以本质上就是将这段数据遍历一遍,对于每个数进行拆分,将每个数字的每一个位分别拿出来统计一下,如果有2,就用一个计数器保存累加结果。
import java.util.Scanner;public class Main {public static void main(String[] arg) {Scanner in = new Scanner(System.in);int l = in.nextInt();int r = in.nextInt();int count = 0;for(int i = l; i <= r; i++) {//遍历每一个数int temp = i;//拿出这个数while( temp != 0) {//对数字进行拆分操作if( temp % 10 == 2) {count++;}temp = temp / 10;//拆去原数字的个位,使剩下的位数继续进入while循环判断}}System.out.println(count);}
}
NC313 两个数组的交集
题目描述:
题目链接:两个数组的交集_牛客题霸_牛客网
▐ 题解
对于求俩个数组的公共元素,可以通过哈希的思想,首先对其中一个数组进行哈希标记,再遍历另外一个数组的每一个元素,将其拿出来与先前标记的元素做对比,如果该数字在另外一个数组中存在哈希标记就说明他们是公共元素。
至于哈希的部分,由于我们的数据量较小,所以就不需要构建哈希容器,即不需要构建HashMap这样的集合容器,我们可以自定义一个布尔类型数组(hash[1024]),将其大小设置为1024,由于1024>1000,因此该数组不会溢出,对于数组1中的元素我们都在这个布尔数组中设置对应位置的布尔值,true代表数组1存在这样的元素,false代表不存在。
举个例子来说:对于数组1中的元素 3 ,我们就将布尔数组中下标为3的元素(hash[3])标记为 true,以此类推,当数组1遍历完了后,布尔数组中为 true 的位置的元素都是在数组1中存在的,为false的就是数组1中不存在的。
当我们遍历第二个数组的时候,只需要将元素拿出来与该值对应的布尔数组的下标所在元素进行对比,就比如我们拿出第二个数组的元素 3 后,我们只需要对比布尔数组中下标为 3 的元素(hash[3])就知道了 3 这个数字是否在数组1存在,由于我们之前将(hash[3])置为了true,因此我们就判断出数字 3 是俩个数组的共同元素。
import java.util.*;public class Solution {public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {ArrayList<Integer> ret = new ArrayList<>();boolean[] hash = new boolean[1024];for(int x : nums1) {hash[x] = true;}for(int x : nums2) {if(hash[x] == true) {ret.add(x);hash[x] = false;}}return ret;}
}
AB5 点击消除
题目描述:
题目链接: 点击消除_牛客题霸_牛客网
▐ 题解
该题目是非常符合栈这样的数据结构的思想的,相邻的元素就进行消除,我们可以将该字符串转化成一个字符数组,将这个字符数组放进栈里面,每一次进栈一个字符,进栈的时候判断当前元素和栈顶元素是否相同,如果相同就要执行消除操作,即弹出栈顶元素并且当前元素也不入栈;如果不相同就让当前元素进栈,如此反复,当数组元素全部放进栈之后我们就相对于得到了一个消除后的数组。政治
确定了使用栈这样的数据结构后,需要思考需要构建集合容器正真的实现一个栈吗?其实是没必要的,我们是对字符串进行操作,使用StringBuilder更加方便进行字符串的删除和拼接操作,因此我们可以用StringBuilder来模拟实现一个栈,通过字符串拼接append()的方法来达到入栈的目的,通过deleteCharAt()删除字符来完成出栈的目的。故而代码如下:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);char[] str = in.next().toCharArray();StringBuilder stack = new StringBuilder();//使用StringBuilder模拟实现一个栈,出栈相对于删除相同元素for(char x : str) {//遍历整个字符数组int len = stack.length();if(len == 0 || stack.charAt(len-1) != x) {//当栈为空、栈顶元素和当前元素不同则入栈stack.append(x);}else {//出栈,即消除相同元素stack.deleteCharAt(len-1);}}if(stack.length() == 0) {stack.append("0");//当所有元素都消除后,需要输出0}System.out.println(stack);}
}
本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见