【蓝桥杯】基础知识积累2

文章详细介绍了Java中的Set和List集合的实现类特点,如HashSet、LinkedHashSet和ArrayList、LinkedList的常用方法,并提供了示例代码。此外,还探讨了数学相关的基本概念,包括质数检测、最大公约数计算、斐波那契数列生成、回文数判断以及大数处理的大数版算法。
摘要由CSDN通过智能技术生成

Set集合

1. 实现类特点

HashSet : 无序、不重复、无索引。

Set<String> sets = new HashSet<>();

LinkedHashSet:有序、不重复、无索引。

Set<String> sets = new LinkedHashSet<>();
2. 常用方法
  1. add // 增加
  2. remove // 删除
  3. size // 长度
  4. toArray // 将集合转化成数组
  5. equals contains // 判断相同
  6. isEmpty // 判断是否为空
  • 增强for迭代
        for(String str:hashSet){
            if("jiaboyan".equals(str)){ // 判断
                System.out.println("你就是我想要的元素:"+str);
            }
            System.out.println(str);
        }
3. 例

字符串 0100110001010001 有多少个不同的非空子串? // 去重

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s = "0100110001010001";
		// 去重使用set
		Set<String> set = new HashSet<String>();
		
		for(int i=0;i<s.length();i++) {
			for(int st=0,en=i+1;en<=s.length();st++,en++) {
				set.add(s.substring(st,en));
			}
		}
		
		System.out.println(set.size());
	}

List集合

1. 实现类特点

ArrayList : 有序集合(插入的顺序==输出的顺序)插入的元素可以为null。

List<String> list = new ArrayList<String>();

LinkedList

List<String> linkedList = new LinkedList<String>();
2. 常用方法
  1. add // 增加
  2. clear // 清空
  3. remove // 删除
  4. get // 获取
  5. size // 长度
  6. toArray // 将集合转化为数组
3. 例

有n箱货物 摆成长宽高 n=LWH
当n=4 可以有6种方案 1 * 1 * 4 / 1 * 4 * 1 … 不需要去重
求n=2021041820210418 总共有多少种方案

public static void main(String[] args) {
		// TODO Auto-generated method stub
	long n = 2021041820210418l;
	long temp = n;
	// 去重
	Set<Long> set = new HashSet<Long>();
	
	for(long i=1;i<temp;i++) {
		if(n%i == 0) {
			temp = n/i;
			set.add(i);
			set.add(temp);
		}
	}
	
	int cnt = 0;
	// 根据key获取值
	ArrayList<Long> list = new ArrayList<Long>(set);
	
	for(int i=0;i<list.size();i++) {
		long a = list.get(i);
		for(int j=0;j<list.size();j++) {
			long b = list.get(j);
			if(a*b>n) {
				continue;
			}
			for(int k=0;k<list.size();k++) {
				long c = list.get(k);
				if(a*b*c == n) {
					cnt++;
				}
			}
		}
	}
	System.out.println(cnt);
	}

1. 质数
	private static boolean prime(int n) {
		// TODO Auto-generated method stub
		if(n<=3) { // 如果传值小于3 直接返回
			return n>1;
		}
		for(int i=2;i<=Math.sqrt(n);i++) { // 从2开始判断 Math.sqrt()减少循环次数
			if(n%i == 0) {
				return false; // 有约数 非质数
			}
		}
		return true;
	}
2. 最大公约数
public int Gcd(int a ,int b ) {
	if(b == 0)
		return a;
	else
		return Gcd(b , a%b) // 递归
}
3. 斐波那契数列
public class Main {
	int a[] = new int[2019];
	a[0] = 0;
	a[1] = a[2] = 1;
	
	for(int i=3;i<2020;i++) {
		a[i] = a[i-1]+a[i-2]; // 从第三个数开始 值等于前两个数相加
	}
}
4. 回文数
public class Main {
		for(int i  = 1000;i < 10000;i++) {
			int temp = i;
			int reverse = 0;
			while(temp != 0) {
				int remain = temp % 10; // 获取最后一个属
				temp /= 10;
				reverse = reverse * 10 + remain; // !关键步骤!
			}
			if(reverse == i) { 	
				System.out.println(reverse);
			}
	}
}

5. 大数版最大公约数
	private static BigInteger gcd(BigInteger a, BigInteger b) {
	// if(b.equals(BigInteger.ZERO)) 
	// 利用equals做判断 相等返回true 不相等返回false
	
		if(b.compareTo(BigInteger.ZERO)==0) { // 利用compareTo做判断
			return a;
		}
		return gcd(b,a.mod(b));
	}
6. 大数版斐波那契数列
public class Main {
		BigInteger a[] = new BigInteger[2021];
		a[0] = BigInteger.ZERO;
		a[1] = a[2] = BigInteger.ONE;
		
		// 要取到a[2020] 则小于2021
		for(int i=3;i<2021;i++) {
			a[i] = a[i-1].add(a[i-2]);
		}
	}
7. 大数版回文数
  • int型 转化成 字符串型
	// 判断回文
	public static boolean isPalindrome(int num) {
		String snumString = "" + num;
		StringBuilder stringBuilder = new StringBuilder(snumString);
		return stringBuilder.reverse().toString().equals(snumString);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值