洛谷刷题day1[P1918 保龄球]

文章介绍了两段Java代码,分别使用暴力解法和哈希表在给定数组中查找目标数。暴力解法通过遍历数组实现,而哈希表方法提高了查找效率,但在实际测试中并未达到预期的AC状态,可能需要进一步优化时间或空间复杂度。
摘要由CSDN通过智能技术生成

题目:略

思路:这道题算是简单题,大概就是在给定的数组中找目标数,找到返回数组下标,米有找到就返回0。

看到题的最初想法有:

  1. 暴力解法(但是这种解法不考虑AC的时间和空间的要求)

import java.util.*;


public class Main {
    static int[] data = new int[100005];
    public static void main(String[] args) {
        //int[] data = new int[100005];
        Scanner in = new Scanner(System.in);
        //位置个数
        int n = in.nextInt();
        in.nextLine();
        //各个通道的瓶子数
        for(int i = 0; i < n; ++i) {
            data[i] = in.nextInt();
        }
        //发球次数
        int m = in.nextInt();
        int[] res = new int[m];
        int cn = 0;
        //int low = 0, high = data.length-1;
        for(int j = 0; j < m; ++j){
            int target = in.nextInt();
            for (int i = 0; i < data.length; ++i) {
                if (data[i] == target) {
                    res[cn] = i + 1;
                    cn++;
                } else {
                    res[cn] = 0;
                    //cn++;
                }
            }
        }
        for(int k = 0; k < m; ++k){
            System.out.println(res[k]);
        }
    }
}
  1. 利用哈希表

import java.util.*;


public class Main {
    //static int[] data = new int[100005];
    public static void main(String[] args) {
        Map<Integer,Integer> p = new HashMap<Integer,Integer>();
        Scanner in = new Scanner(System.in);
        //位置个数
        int n = in.nextInt();
        in.nextLine();
        //各个通道的瓶子数
        for(int i = 0; i < n; ++i) {
            p.put(in.nextInt(), i+1);
            //data[i] = in.nextInt();
        }
        //发球次数
        int m = in.nextInt();
        int[] res = new int[m];
        int cn = 0;
        for(int j = 0; j < m; ++j){
            int target = in.nextInt();
            if(p.containsKey(target) == true){
                res[cn] = p.get(target);
            }
            else {
                res[cn] = 0;
            }
            cn++;
        }
        for(int k = 0; k < m; ++k){
            System.out.println(res[k]);
        }
    }
}

结果哈希表还没AC……90%……

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值