半天学会蓝桥杯JAVA组入门基础算法!(更新中)

    本篇文章是跟着B站的一位大佬(UP:只学算法找工作)学习制作的,本篇文章的内容都是观看该视频所记录下的笔记,希望能对大家有所帮助。(原B站UP视频连接:保姆级 | 零基础备赛蓝桥杯java组 | )

    这篇是本栏目的第一篇内容,主要学习JAVA的基础数据类型和输入输出以及数组。在未来也会继续更新下去,直到学习完毕。

    在本栏目编写过程中,也会对视频内容的一些知识进行变化,并且会增加一些我自己的思考。所以本栏目的内容不是和视频一样一成不变的知识。只是为了我自己能够更好的理解或者拓展所以做了一些些的修改,希望对大家能够有所帮助。如果发现我的文章编写内容有错误的话,欢迎大家在评论区留言或者自己私信我,我会第一时间进行更改的!

    最后祝各位能够早日学会算法,在蓝桥杯比赛中获得优异的成绩٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و!

基础格式

//java常用固定格式
public class Main{
    public static void main(String [] args){
        //声明变量语句
        int a = 10;
        long b =Integer.MAX_VALUE+1;//Integer.MAX_VALUE就是Int类型的最大值
        //打印输出语句
        System.out.print(a);//print是不换行
        System.out.println(b);//println是自动换行
    }
}

数据类型

本文章只记录做题常用到的基础数据类型.

  1. Int (整型)

    • 数据类型是32位
    • 最小值是-2^31
    • 最大值是2^31 -1
    • 默认值是0
  2. Long (长整型)

    • 数据类型是64位
    • 最小值是-2^63
    • 最大值是2^63 -1
    • 默认值是0
  3. float (单精度浮点数)

    • 数据类型是单精度32位
    • 默认值是0.0
    • PS:不能表示精确的值
  4. double (双精度浮点数)

    • 数据类型是双精度64位
    • 默认值是0.0
    • PS:同样也不能表示精确的值
  5. boolean (布尔类型)

    • 数据类型表示1位信息
    • 只有"true"和"false"
    • 默认值是"false"
  6. char(字符类型)

    • 单一的16位Unicode字符

    • 案例

      char a = 'b';
      System.out.println(a);
      

输入输出

在这里插入图片描述

代码示例:

//导入java.util包
import java.util.*;

public class Main{
    public static void main(String [] args){
        Scanner a = new Scanner(System.in);//引入Scanner对象
        int b = a.nextint();
        System.out.println(a);
        
        String c = a.next();
        System.out.println(c);
        
    }
}

在这里插入图片描述

next()nextLine()的区别

区别就在于next()就是敲下空格键之后就停止

在这里插入图片描述

而nextLine()会打印一整段的内容,不会因为空格而失去接收信息

在这里插入图片描述

精选例题

在这里插入图片描述

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner a = new Scanner(System.in);
        float a = a.nextFloat();
        System.out.println("%.3f",a);
        /*
        按要求输出多少位浮点数
        如果要输出5位的话就改成("%.5f",a)
        */
    }
}

数组

特点介绍

  • 数组中的元素在内存中是依次紧密排列的有序的.
  • 数组一旦初始化完成,其长度就是确定的,而数组的长度一旦确定就不能修改.
  • 数组的索引是从0开始的.

代码语句

int []arr = new int [10];	//new一个长度为10的静态数组
int []arr1 ={1,2,3,4,5};	//new一个有5个元素的动态数组

System.out.println(arr.length)	//arr.length 打印出数组的长度
    
    //遍历数组
    for(int i=0;i<5;i++){
        System.out.println(arr1[i]);
    }

完整代码

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner a=new Scanner(System.in);
            int []arr = new int [10];	//new一个长度为10的静态数组
            int []arr1 ={1,2,3,4,5};	//new一个长度为5的动态数组

            System.out.println(arr.length)	//arr.length 打印出数组的长度
                //遍历数组
            for(int i=0;i<5;i++){
                System.out.println(arr1[i]);
            }
    }
}

经典例题

image-20240220010347415

答案

在这里插入图片描述


哈希表

特点介绍

  1. 哈希表是一个不允许出现重复元素,并且无序的集合,主要有HashSet实现类。
  2. 在判断重复元素的时候,Set集合会调用hashCode(和equal0方法来实现。
  3. 注重独一无二的性质,该体系集合可以知道某物是否已近存在于集合中,不会存储重复的元素.
  4. 用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复.

特点:

  • 可以用来去重
  • 元素无序

代码语句

image-20240220011547588

Set<数据类型>set = new HashSet<>();	//声明一个存放该数据类型的哈希表

完整代码

import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner a=new Scanner(System.in);
		Set<Integer>set = new HashSet<>();	//声明一个存放该数据类型的哈希表
        	set.add(1);	//向set哈希表中添加一个1
        	boolean text = set.add(1);	//在再次向set表中添加一个1,并且由一个布尔类型text对添加进行一个测试.
        		System.out.println(text);	//发现测试结果是false,说明再次添加就会返回flase.
        	set.remove(1);	//删除掉刚刚添加的1
        	text = set.contains(1);
        		System.out.println(text);	//检查text中是否还存在1,最后的结果是flase,说明1不存在了.这是因为刚刚执行了set.remove方法
        	set.clear();	//最后就是清楚set里面的内容
    }
}

详细介绍

问题一:观察这一段代码,为什么boolean text = set.add(1); System.out.println(text);打印出来结果是false?

public class Main{
boolean text = set.add(1);	
System.out.println(text);
//在这段代码中,boolean text = set.add(1);语句的作用是将元素1添加到HashSet集合中,并返回一个布尔值表示添加操作的结果。如果元素1之前不存在于集合中,则添加成功,返回true;如果元素1已经存在于集合中,则添加失败,返回false。

问题二: 为什么text = set.contains(1);不能改成set =set.contains(1);

在Java中,set.contains(1)是用来判断集合set中是否包含元素1的方法。它返回一个布尔值,表示是否包含该元素。因此,text = set.contains(1)将返回一个布尔值,并将其赋值给变量text

如果将代码改为set = set.contains(1),则会导致编译错误。因为set.contains(1)返回的是一个布尔值,而不是一个集合对象。所以不能将布尔值赋给集合对象set

如果你想要判断集合中是否包含元素1,并将结果赋给变量set,可以使用以下方式:

boolean text = set.contains(1);

经典例题

https://www.luogu.com.cn/problem/P4305

image-20240220013826109

答案

在这里插入图片描述


List和哈希Map

特点介绍

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

image-20240222092930576比较常用的是前三个方法

代码语句

//实例化List
List<lnteger>list = new ArrayList<>();

完整代码

import java.util.*;
public class Main {
    public static void main (String []args){
        List<Integar>list = new ArrayList<>();
        list.add(1);	//这里使用的是List方法一
        list.add(2);
        System.out.println(list.size());	//List方法二,打印列表中的所有元素
        System.out.println(list.get(1));	//输出下标为1的数字,也就是2	//这里使用的是List方法三
    }
}

HashMap

特点介绍

  1. HashMap是一个散列表,它存储的内容是键值对(keyi-value)的映射.
  2. HashMap实现了Map接口,可以根据键的HashCode值存储数据,具有很快的访问速度.
  3. HashMap是无序的,即不会记录插入的顺序.

image-20240222103940484

注意:方法四getOrDefault中的D需要大写!!!

代码语句

//实例化HashMap
Map<Integer,Integer>map = new HashMap<>();
	map.put(1,2);	//HashMap中的put方法
	map.put(2,1);
	int x = map.get(2);
	System.out.println(x);	//此时输出的是1
	System.out.println(map.size());	//输出的是2
    System.out.println(map.getOrDefault(3,-1));	//此时因为没有,所以返回给k的是默认值-1
	
	

完整代码

import java.util.*;
public class Main{
    public static void main(String [] args){
     //实例化HashMap
    Map<Integer,Integer> map = new HashMap<>();
        map.put(1,2);	//HashMap中的put方法
        map.put(2,1);
        int x = map.get(2);
        System.out.println(x);	//此时输出的是1
        System.out.println(map.size());	//输出的是2
        System.out.println(map.getOrDefault(3,-1));  
    }
}

经典例题

image-20240222105438886

链接: https://www.luogu.com.cn/problem/P1102

答案

image-20240222105818127

特点介绍

Stack的特点:先进后出.

image-20240222110419737

代码语句

Stack <Integer> stack = new Stack<>();
	stack.add(1);	//.add和.push都是压入栈
	stack.add(2);
	stack.add(3);
	//如果栈不为空的话,就出栈
	while(!stack.isEmpty()){
        System.out.println(stack.pop());	//stack.pop()就是出栈
    }

经典例题

image-20240222110443382链接:https://www.luogu.com.cn/problem/P1427

image-20240222110657212链接:https://www.luogu.com.cn/problem/P1739

答案

第一题答案

image-20240222110640809

第二题答案

image-20240222110821687


队列

特点介绍

队列的特点是先进先出

常用方法:

  1. Bollean add(Object element)从队尾压入元素,返回是否压入成功.
  2. Object poll()删除并且返回对头被删除的那个元素.
  3. Object peek()返回对头元素,但是不删除
  4. boolean isEmpty()删除队列是否为空

代码语句

//通过LinedList类创建对象
Queue<Integer> q = new LinkedList<>();

//压入元素
	q.add(1);
	q.add(2);
	q.add(3);
//检测是非为空
	while (!q.IsEmpty()){
        System.out.println(p.peek())
    }

经典例题

image-20240223234556023

链接:https://www.luogu.com.cn/problem/P1996

答案

image-20240223235327485

排序

特点介绍

数组排列

通过Arrays.sort()方法对一个数组所以元素进行排序,并且默认按从小到大的顺序排列.

集合排列

通过Collections.sort()方法对一个集合的所以元素进行排列,并且从小到大的顺序.

代码语句

数组排列
//Arrays.sort(int []a)
/*lambada表达式进行自定义排序
	Arrays.sort(int []arr,(o1,o2)->01-02 )	//进行升序排列
	Arrays.sort(int []arr,(o1,o2)->o2-o1 )	//进行降序排列
*/
//输出一个排序数组
Integer []a={3,6,3};
Arrays.sort(a);
	//通过for循环打印
	for(int i=0;i<a[i].length;i++){
        System.out.println( a[i]+" " );
    }
//通过lambada表达式输出一个二维数组排序
Integer [][]a={{1,2,3},{2,3,4}};
Arrays.sort(a,(o1,o)->o2[0])-o1[0];	//?????
	//通过for循环打印
	for(int i=0;i<a[i].length;i++){
        	for(int j=0;j<a[i].lngth;j++)
        	System.out.println( a[i][j]+" " );
        	System.out.println();
    }
集合排列
//Collections.sort(List<> arr)
//lambda表达式也与数组排序方法类似
//Collections.sort(List<> arr,(o1,o2)->o1-o2)	升序排序
//list排序代码实例
public class main{
    public static void main(String[] args){
        Scanner s= new Scanner(System.in);
        List<Integer>list = new ArrayList<>();
        list.add(1);
        list.add(4);
        list.add(2);
        list.add(3);
		Collections.sort(list,(o1,o2)->o2-o1);
        	for(int i=0;i<list.size;i++){
                System.out.print(list.get(i)+" ");
            }
    }
}

经典例题

image-20240224212707467

链接:https://www.luogu.com.cn/problem/P1739

答案

image-20240224212735241

String和StringBuilder

特点介绍

  1. String类都代表的是字符串,也就是java程序中的字符串文字,都被实现为此类.
  2. String类代码是由final修饰的,它们的值在创建后不能被更改.字符串缓冲区支持可变字符串.
  3. 因为String对象是不可变的,他们可以被共享.

特点:

  • String通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同.
  • 以双引号方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象

image-20240224224354302

image-20240224224416923

代码语句

import java.util.*;
public class main{
    public static void main (String []args){
        Scanner s = new Scanner(System.in);
        String a = new String("abc");	//有参构造
        String b = new Sting();		//无参构造
    }
}
import java.util.*;
public class Main{
    public static void main(String [] args){
        Scanner scan=new Scanner(System.in);
        StringBuilder s=new StringBuilder();
            s.append(1);
            s.append('x');
            s.append("javaweb");
            s.reverse();
            System.out.println(s);
    }
}

经典例题

image-20240224224806799

链接:https://www.luogu.com.cn/problem/B2109

第一题

image-20240224224901938

链接:https://www.luogu.com.cn/problem/B2124

第三题

image-20240224225142172

链接:https://www.luogu.com.cn/problem/B3640

答案

image-20240224224844561

第二题答案

image-20240224224941218

时间复杂度

时间复杂度时间复杂度是用来分析算法执行时间随着问题规模增大而增长的速度。它衡量了算法的执行效率。常数级别(O(1))、对数级别(O(leg n))、线性级别(O(n))、线性对数级别(O(nlog n))、平方级别(O(n^2))、立方级别(O(n^3))和指数级别(O(2^n))等.

计算机1s可以计算10的8次方,所以我们解题的时候,要控制代码的时间复杂度在10~8以内!

代码语句时间复杂度
for (inti=0;i<n;i++)该代码的时间复杂度为o(n)
for (int i=0;i<n;i++){for(intj=0;j<n;j++)}该代码的时间复杂度为o(n*n)
for(int i=1;i<=n;i*=2)``该代码的时间复杂度为o(logn)

image-20240224231551101

空间复杂度

image-20240224231612054

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值