刷题学算法
数据结构
一、数组
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)递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
零散知识点
一、String
substring(i) – 字符串从0开始,截取包括i所在位及后边所有位数字符串
 indexOf(“h”) – 返回字符串中首次出现h的位置
二、常用方法
判断偶数:i%2==0
 判断奇数:i%2==1
三、Collection
排序:Collections.sort()



















