Java洛谷P1102 A-B 数对-Map用法

目录

1、洛谷P1102 A-B 数对

2、JDK1.6 API中的Map方法

3、Map用法实例


1、洛谷P1102 A-B 数对

OJ:https://www.luogu.com.cn/problem/P1102   标签:模拟数论,数学排序二分查找哈希,HASH概率论,统计

package 二分查找与二分答案;
/*
 * 这一题将A-B=C转换成A=B+C,首先将A数组每个元素出现的次数统计起来,用map映射,
 * 答案每次加上a[i]+c位置的数的个数,a[i]+c即为式子的另一个加数
 * 
 * map相关库函数:
 * map.put(key,value) 增加 一个key-value对
 * map.get(key) 根据key来获得value.
 */
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class P1102A减B数对 {
	//成员变量比局部变量占用内存更小
	static int[] a; 
	static long ans=0;
	static int t = 0;//引入变量t,记录键(数字)的次数
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n=in.nextInt();
		int c=in.nextInt();
		//建立一个数字到出现次数的映射 map<num,times>
		Map<Integer,Integer> m=new HashMap<Integer, Integer>();
		a=new int[n];
		for(int i=0;i<n;i++) {
			a[i]=in.nextInt();
			if(m.get(a[i])==null)t=0;//必须判断值是否为空,否则报错
			else t=m.get(a[i]);
			m.put(a[i],++t);	
		}
		//将查找A、B满足A-B=C,转换成只需查找A满足A=B+C
		for(int i=0;i<n;i++) {
			if(m.get(a[i]+c)!=null)//必须判断值是否为空,否则报错
				ans+=m.get(a[i]+c);
		}
		System.out.println(ans);
	}
}

2、JDK1.6 API中的Map方法

voidclear()
          从此映射中移除所有映射关系(可选操作)。
 booleancontainsKey(Object key)
          如果此映射包含指定键的映射关系,则返回 true。
 booleancontainsValue(Object value)
          如果此映射将一个或多个键映射到指定值,则返回 true。
 Set<Map.Entry<K,V>>entrySet()
          返回此映射中包含的映射关系的 Set 视图。
 booleanequals(Object o)
          比较指定的对象与此映射是否相等。
 Vget(Object key)
          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
 inthashCode()
          返回此映射的哈希码值。
 booleanisEmpty()
          如果此映射未包含键-值映射关系,则返回 true。
 Set<K>keySet()
          返回此映射中包含的键的 Set 视图。
 Vput(K key, V value)
          将指定的值与此映射中的指定键关联(可选操作)。
 voidputAll(Map<? extends K,? extends V> m)
          从指定映射中将所有映射关系复制到此映射中(可选操作)。
 Vremove(Object key)
          如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
 intsize()
          返回此映射中的键-值映射关系数。
 Collection<V>values()
          返回此映射中包含的值的 Collection 视图。

3、Map用法实例

Map 初始化

Map<String, String> map = new HashMap<String, String>();

插入元素

map.put("key1", "value1");

获取元素

map.get("key1")

移除元素

map.remove("key1");

清空元素

map.clear();

 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值