洛谷 P1469 找筷子(java实现)

P1469 找筷子

题目描述

经过一段时间的紧张筹备,电脑小组的“RP 餐厅”终于开业了,这天,经理 LXC 接到了一个定餐大单,可把大家乐坏了!员工们齐心协力按要求准备好了套餐正准备派送时,突然碰到一个棘手的问题:筷子!

CX 小朋友找出了餐厅中所有的筷子,但遗憾的是这些筷子长短不一,而我们都知道筷子需要长度一样的才能组成一双,更麻烦的是 CX 找出来的这些筷子数量为奇数,但是巧合的是,这些筷子中只有一只筷子是落单的,其余都成双,善良的你,可以帮 CX 找出这只落单的筷子的长度吗?

输入格式

第一行是一个整数,表示筷子的数量 n。

第二行有 n个整数,第 i 个整数表示第 i根筷子的长度 a_i。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1

9
2 2 1 3 3 3 2 3 1

输出 #1

2

说明/提示

数据规模与约定

  • 对于 30% 的数据,保证n≤10^5。
  • 对于 100% 的数据,保证 1≤n≤107+1,1≤*ai*≤109。

提示

  • 请注意数据读入对程序效率造成的影响。
  • 请注意本题的空间限制为 4Mb。

题解一

package p1469;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
//	超内存
public class Main {
	public static void main(String[] args) throws Exception{
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int n = Integer.parseInt(bf.readLine());
		String numb[] = bf.readLine().split(" ");
		bf.close();
		HashMap<String,Integer> map = new HashMap<>();
		for(int i=0;i<numb.length;i++) {
			int count = 1;
			if(map.containsKey(numb[i])) {
				count =map.get(numb[i]);
				count++;
			}
			map.put(numb[i],count);
		}
        String key = null;
        int value;
        // 获取键值对的迭代器
        Iterator<Entry<String, Integer>> it = map.entrySet().iterator();
        while (it.hasNext()) {
            Entry<String, Integer> entry = (Entry<String, Integer>) it.next();
            key = (String) entry.getKey();
            value = (int) entry.getValue();
            if(value%2!=0) {
            	System.out.println(key);
            	return;
            }
        }
	}
}

题解二

package p1469;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
public class Main {
    //	快读快写
	public static void main(String[] args) throws Exception{
		StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
		PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
		st.nextToken();
		int n = (int)st.nval;
		int ans = 0;
		for(int i=0;i<n;i++) {
			st.nextToken();
			ans ^= (int)st.nval;
		}
		pw.println(ans);
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杜柠函

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值