PAT甲级1041 Be Unique 附带易错点和算法分析

PAT 甲级 1041 附带易错点和算法分析

**易错分析:**这道题是万万不能用双重循环以此比较这个数字在数组中是否唯一这种方法的,不仅不易写对,而且一定超时。这种就属于算法错误了。

算法最好的方法是建立一个100001大小的数组(实际上可以不用这么大,保证算法正确的情况下,如果超时可以将这个数字改小一点,因为测试用例中的数据没有给到这么大的),记录重复的数字,最后将内容为1(说明唯一)的拿出来比较谁在bets(输入数据数组)的最前面就好了。


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args)throws Exception {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String[] s=br.readLine().split(" ");  //要用BufferedReader,在读入数据特别多的情况
        br.close();							//下优势就显现出来了,比Scanner快得多
        int N=Integer.parseInt(s[0]);
        int[] bets=new int[N];
        for(int i=1;i<s.length;i++){
            bets[i-1]=Integer.parseInt(s[i]);
        }
        int[] nums=new int[100001]; //后两个测试点如果运行超时,这个100001可以改小一点
        for(int i=0;i<N;i++){       //亲测50001能全部AC
            nums[bets[i]]++;
        }
        ArrayList<Integer> list=new ArrayList<>();
        for(int i=0;i<nums.length;i++){
            if(nums[i]==1){  //找nums数组中为1的下标,为1说明只有一个,满足unique的条件
                list.add(i);
            }
        }
        if(list.size()==1){
            System.out.print(list.get(0));
            System.exit(1);
        }else if(list.size()>1){
            ArrayList<Integer> index=new ArrayList<>();
            for(int i=0;i<N;i++){
                for(int j=0;j<list.size();j++){
                    if(list.get(j)==bets[i]){
                        System.out.print(bets[i]);
                        System.exit(1);
                        break;
                    }
                }
            }
        }else{
            System.out.print("None");
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值