day01笔试练习

目录

1.数字统计

2.两个数组的交集


1.数字统计

该题通过枚举和拆分数字来解决问题

首先把【L,R】之间的数字列举出来,这种方式我们称为枚举

再对数字通过余10的方式判断该数字个位、十位、百位是否为2

初次余10只能判断个位,要想判断十位、百位 则需要通过除10的方式进一步舍去之前判断过的位数

因此我们需要先余十判断个位,再除十去掉个位,再余十判断十位 ,依次进行余十除十的操作

 

2.两个数组的交集

 首先我们需要通过查找数字的方式来判断第二个数组中是否包含第一个数组中的数据,这是我们就可以想到查找数字最快的方式那就是hash

其次我们如果new HashMap的话就会创建一个新的容器,创建一个新的容器就会使编译速度下降,题目所给的数字要求比较小为【1,1000】,在这种情况下我们可以创建一个数组来存数据速度会快一些

编译步骤我们分以下步几步进行 

import java.util.*;


public class Solution {

    public ArrayList<Integer> intersection (ArrayList<Integer> nums1, ArrayList<Integer> nums2) {
        // 创建一个boolean类型的数组
        // 如果数字存放在数组中那么就显示true
        // 如果已经添加的数字我们可以显示 false 来去除这个数字

        boolean[] hash = new boolean[1010];

        //首先我们把数组一放在hash数组中
        for(int x:nums1){
            hash[x] = true;
        }
        //创建一个数组来存贮相同数字
        ArrayList<Integer> ret = new ArrayList<>();
        
        //遍历第二个数组 看看 hash里面是否有数组2中的值 
        // 如果有数组ret就添加 
        // 同时通过 hash[x] = false 把已经添加的数字去除 避免数字重复
        
        for(int x:nums2){
            if(hash[x]){
                ret.add(x);
                hash[x] = false;
            }
        }
        return ret;
    }
}

3.点击消除

 方法一:创建一个可变长数组来存放输入的字符数组

    public static void main(String[] args){
        //输入字符数组a
        Scanner sc = new Scanner(System.in);
       char[] a = sc.next().toCharArray();
       StringBuilder st = new StringBuilder();
      
        for (int i = 0; i < a.length; i++) {
            char ch = a[i];
            //遍历字符数组 如果创建的 st 不为空 并且 st最上面的元素 和 ch 相同那么就删除这个元素  
            // 否则就添加这个元素
            if(st.length() != 0 && ch == st.charAt(st.length() -1)){
                st.deleteCharAt(st.length() -1);
            }
            else{
                st.append(ch);
            }
        }
        // 最后进行输出
        System.out.println(st.length() == 0 ? 0 : st.toString());

    }

方法二:利用栈来实现

import java.util.*;
 
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        String s = in.next();
        Stack<Character> st = new Stack<>();
        for (int i=0;i<s.length();i++) { 
            char a = s.charAt(i);//取出第i个元素
            if(st.isEmpty()||a!=st.peek()){//如果栈是空的或者第i个数据不是栈顶的数据
                st.push(a);//就将数据压入栈中
            }else if(a==st.peek()){//如果栈顶的数据为第i个元素的数据
                st.pop();//就将栈顶的数据弹出
            }
        }
        if(st.isEmpty()){
            System.out.println(0);//如果栈是空的,就直接输出0
        }else{
            Stack<Character>st2= new Stack<>();
            while(!st.isEmpty()){
                st2.push(st.pop());
            }
            while(!st2.isEmpty()){
                System.out.print(st2.pop());
            }
        }//注意放入栈中的数据弹出是反着的,所以要再次放入另一个栈中,这样才是正的
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值