- 🍁 个人主页:爱编程的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 here
HashSet<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));
}
}