牛客网算法题精讲与实战(第一期)

发布时间:2026/7/8 10:02:39
牛客网算法题精讲与实战(第一期) 一、枚举数字统计_牛客题霸_牛客网解题思路依次遍历区间里每一个数字 i从 L 循环到 R对每个数字 i拆分它的每一位个位、十位、百位…逐位判断是不是数字 2只要某一位等于 2全局计数器就 1全部数字遍历完成后输出计数器的总数代码实现import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scnew Scanner(System.in); int lsc.nextInt(); int rsc.nextInt(); int num0; for(int il;ir;i){ int tempi; while(temp!0){ if(temp%102){ num; } temptemp/10; } } System.out.println(num); } }二、数组哈希两个数组的交集_牛客题霸_牛客网解题思路通过bool类型创建一个哈希表用来标记数组创建集合存放最终交集遍历nums1数组将nums1中有的元素存入哈希表中遍历nums2数组筛选公共元素并且去重代码实现import java.util.*; public class Solution { public ArrayListInteger intersection (ArrayListInteger nums1, ArrayListInteger nums2) { boolean[] hashnew boolean[1010]; for(int i:nums1){ hash[i]true; } ArrayListInteger ret new ArrayList(); for(int i:nums2){ //如果nums1和nums2都有hash[i]即有重复元素 if(hash[i]){ ret.add(i);//放入集合中 hash[i]false;//删除哈希表中元素 } } return ret; } }三、栈点击消除_牛客题霸_牛客网解题思路使用StringBuilder充当栈先判断栈里有没有元素有才能取栈顶防止空指针报错当前字符和栈顶一样相邻重复删掉栈顶消除当前字符和栈顶不一样把当前字符加到栈末尾注此题为减小性能开销未使用ArrayDeque而使用了StringBuliderStringBuilder底层是可变字符数组支持在末尾增删、查看末尾完全对应栈功能。但StringBuilder只适合字符栈场景只能存 char不能存其他对象。代码实现import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in new Scanner(System.in); char[] sin.next().toCharArray(); StringBuilder scnew StringBuilder(); for(int i0;is.length;i){ char chs[i]; //如果栈不为空并且字符与栈最后一个元素相同从栈中删除 if(sc.length()!0 chsc.charAt(sc.length()-1)){ sc.deleteCharAt(sc.length()-1); }else{ //否则把元素放入栈中 sc.append(ch); } } System.out.println(sc.length()0 ? 0:sc.toString()); } }四、小结后面会陆续更新很多算法题哦其实前面也还有很多博客还欠着呢哈哈哈。只看不复盘等于白看所以后面更新频率会变高哦敬请期待吧