刷题学算法

刷题学算法

数据结构

一、数组

1. 数组创建:

// 方式1:先创建,再逐个存储元素
String[] cityArray1 = new String[5];
cityArray1[0] = "北京";
cityArray1[1] = "上海";
cityArray1[2] = "广州";
cityArray1[3] = "深圳";
cityArray1[4] = "杭州";
System.out.println(Arrays.toString(cityArray1));
 
// 方式2:创建数组,并直接初始化数组中的元素(不使用new关键字)
String[] cityArray2 = { "成都", "重庆", "西安", "苏州", "南京", "大连", "沈阳" };
System.out.println(Arrays.toString(cityArray2));
System.out.println(cityArray2.length);
 
// 错误
// cityArray2 = {"","",""}; 使用该方式初始化元素值,初始化必须与定义数组在同一行代码中
 
// 方式3:创建数组,并直接初始化数组中的元素(使用new关键字)
String[] cityArray3 = new String[] { "宝鸡", "安康", "汉中", "渭南" };
System.out.println(Arrays.toString(cityArray3));
 
// 该方式可以让数组重新分配内存空间,并初始化
cityArray3 = new String[] {"南洋","信阳","沁阳","濮阳"};

Java的数组有几个语法特点:
●数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;
●数组一旦创建后,大小就不可改变,所以说数组长度固定;
●访问数组中的某一个元素,需要使用索引。数组索引从0开始。例如,5个元素的数组,索引范围是0~4。
●可以修改数组中的某一个元素,使用赋值语句,例如,ns[1] = 79;
●可以用数组变量.length获取数组大小

2.Leetcode题目

hot100 : easy1

二、栈 stack

栈详解参考
在Java中,我们用Deque可以实现Stack的功能
在这里插入图片描述
这里注意,pop()返回的是被弹出的站定对象,但与此同时会对栈做顶部元素移除

三、链表(ListNode)

链表是一种数据结构:由数据和指针构成,链表的指针指向下一个节点。 链表 是用Java自定义实现的链表结构,在Java中用需要自己定义一个ListNode类来生成链表对象。

对链表的操作

class ListNode {        //类名 :Java类就是一种自定义的数据结构
    int val;            //数据 :节点数据 
    ListNode next;      //对象 :引用下一个节点对象。在Java中没有指针的概念,Java中的引用和C语言的指针类似
    
    ListNode(int val){  //构造方法 :构造方法和类名相同   
        this.val=val;   //把接收的参数赋值给当前类的val变量
    }
}

class Test{
    public static void main(String[] args){
        
        ListNode nodeSta = new ListNode(0);          //创建首节点
        ListNode nextNode;                           //声明一个变量用来在移动过程中指向当前节点
        nextNode=nodeSta;                            //指向首节点
        
        //创建链表
        for(int i=1;i<10;i++){
            ListNode node = new ListNode(i);         //生成新的节点
            nextNode.next=node;                      //把心节点连起来
            nextNode=nextNode.next;                  //当前节点往后移动
        } //当for循环完成之后 nextNode指向最后一个节点,
        
        nextNode=nodeSta;                            //重新赋值让它指向首节点
        print(nextNode);                             //打印输出
     
        //插入节点
        while(nextNode!=null){
            if(nextNode.val==5){
                ListNode newnode = new ListNode(99);  //生成新的节点
                ListNode node=nextNode.next;          //先保存下一个节点
                nextNode.next=newnode;                //插入新节点
                newnode.next=node;                    //新节点的下一个节点指向 之前保存的节点
            }
            nextNode=nextNode.next;
        }//循环完成之后 nextNode指向最后一个节点
         nextNode=nodeSta;                            //重新赋值让它指向首节点
         print(nextNode);                             //打印输出
      
    }
    
    static void print(ListNode listNoed){
        //创建链表节点
        while(listNoed!=null){
            System.out.println("节点:"+listNoed.val);
            listNoed=listNoed.next;
        }
        System.out.println();
    }
}

注意:对链表进行操作时,经常要新建一个链表变量去存放后边要用到的节点,一遍后期指向;

算法

一、递归算法

eg: hot100.3

什么是递归呢?函数在运行时调用自己,这个函数就叫递归函数,调用的过程叫做递归。 比如定义函数 f(x)=x+f(x−1)f(x)=x+f(x-1)f(x)=x+f(x−1):
递归的两个规律:
(1)递归函数必须要有终止条件,否则会出错;
(2)递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。

二、斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

    public int climbStairs(int n) {
        int p=1; int q=1; int sum;
        for(int i=0; i<n-1; i++){
            sum = p+q;
            p=q;
            q=sum;
        }
        return q;

    }

零散知识点

一、String

substring(i) – 字符串从0开始,截取包括i所在位及后边所有位数字符串
indexOf(“h”) – 返回字符串中首次出现h的位置

二、常用方法

判断偶数:i%2==0
判断奇数:i%2==1

三、Collection

排序:Collections.sort()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值