- 🍁 个人主页:爱编程的Tom
- 💫 本篇博文收录专栏:每日一练-算法篇
- 👉 目前其它专栏:c系列小游戏 c语言系列--万物的开始_ Java专栏等
- 🎉 欢迎 👍点赞✍评论⭐收藏💖三连支持一下博主🤞
- 🧨现在的沉淀就是对未来的铺垫🎨
目录
前言
题目一
题目二
题目三
前言
每天练习三道题,今日题目:统计数字2出现次数、寻找公共元素、点击消除问题。
题目一
统计区间内某个数字出现的次数
例如在区间[2.22]的范围之中,统计数字2出现的次数(应为6次)。
本题要求在某一区间内,统计2出现的次数。
- 第一次尝试解题:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int start = scanner.nextInt();int end = scanner.nextInt();Set<Integer> set = new HashSet<>();for (int i = start; i < end; i++) {if (i == 2 || String.valueOf(i).contains("2")) {set.add(i); }}System.out.println(set.size());}
通过提交发现,只通过了10%的测试用例,经过检查发现该代码只统计了出现2以及包含2的数字的次数,并没有解决问题。
更新思路:使用除10取余,除10取整的方法,计算统计每个数字中2出现的次数,最后在累加得到最终值,使问题得到了解决,最终通过全部的测试用例 。
- 更新后的代码:
public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int start = scanner.nextInt();int end = scanner.nextInt();int count = 0;for(int i = start; i <= end; i++) {count += countNum(i);}System.out.println(count);}public static int countNum(int num) {int count = 0;while (num > 0) {if (num % 10 == 2) {count++;}num /= 10;}return count;}
题目二
计算两个数组之间的公共元素,例如数组1中 {1,2,3,4}, 数组2中{2,3,5,6},所对应的公共元素就是{2,3}。由此可得:
解题思想:使用HashSet解决问题,看数组2是否包含数组1的内容,包含则输出并返回。
并且通过全部的测试用例
- 解决代码:
public ArrayList<Integer> intersection(ArrayList<Integer> nums1, ArrayList<Integer> nums2) {// write code hereHashSet<Integer> set1 = new HashSet<>(nums1);HashSet<Integer> set2 = new HashSet<>(nums2);ArrayList<Integer> result = new ArrayList<>();for (Integer num : set1) {if (set2.contains(num)) {result.add(num);}}return result;}
题目三
经典的牛牛点击消除问题 :相邻的两个小写字母可以相互抵消,其它情况均不可以。
例如输入abbc,输出ac;输入absddsc,输出abc.
由上述可知,可以利用栈的特性来进行解决:先进后出
思路:我们将其数据放入一个栈中,后入栈的与栈中数据对比,栈空入栈,相等出栈,不等入栈,最后输出栈中元素,逆序打印(因为先进后出的原因,出栈的数据是反的,需要逆序打印)
最终通过全部的测试用例
解决代码:
public static void main3(String[] args) {Stack<Character> stack = new Stack<>();Scanner sc = new Scanner(System.in);String str = sc.nextLine();for (int i = 0; i < str.length(); i++) {if (stack.empty()) {stack.push(str.charAt(i));} else if (str.charAt(i) == stack.peek()) {stack.pop();}else {stack.push(str.charAt(i));}}if (stack.empty()) {System.out.println(0);}String s = "";while (!stack.empty()) {s = s + stack.pop();}for (int i = s.length()-1; i >= 0 ; i--) {System.out.print(s.charAt(i));}}