Leecode

2021 /11/8

字符串比较

String a=“ABCDEF”
String b=‘BC’ 得到b在a的第几位

暴力

public class test {
    public static void main(String[] args) {
        String a = "dweaaaaaaa";
        String b = "ea";
        int result = (int) search(a, b);
        System.out.println(result);
    }

    static int search(String a, String b) {
        int alength = a.length();
        int blength = b.length();
        for (int i = 0; i < alength - blength; i++) {
            int j;
            for (j = 0; j < blength; j++) {
                if (b.charAt(j) != a.charAt(i + j)) {
                    break;
                }
                return i;
            }

        }
        return -1;
    }
}

RK算法

大概思路是把每个字母转换成一个固定的数,然后求和,如果和相等再

BM算法

坏字符规则 :
好后缀规则 :
移动这两个更大的一个

KMP算法

链表反转(递归和遍历)

package com.dayup.algorithm.task.linetable;

/**
 * @author zhz
 * @date 2021/12/3
 */
public class LinkTableReverse {
    public static void main(String[] args) {
        LinkedNode a1=new LinkedNode(0);
        LinkedNode a2=new LinkedNode(1);
        LinkedNode a3=new LinkedNode(2);
        LinkedNode a4=new LinkedNode(3);
        a1.setNext(a2);
        a2.setNext(a3);
        a3.setNext(a4);
        LinkedNode head=a1;
        while (a1!=null){
            System.out.println(a1.getData());
            a1=a1.getNext();
        }
        LinkedNode res1 = reverseTwo(head);
        while (res1!=null){
            System.out.println(res1.getData());
            res1=res1.getNext();
        }
    }
    //递归
    private static LinkedNode reverseOne(LinkedNode head){
        if(head.getNext()==null || head==null){
            return head;
        }
        LinkedNode next = head.getNext();
        LinkedNode linkedNode = reverseOne(next);
        next.setNext(head);
        head.setNext(null);
        return linkedNode;
    }
    private static LinkedNode reverseTwo(LinkedNode head){
        if(head==null || head.getNext()==null){
            return head;
        }
        LinkedNode pre = head;
        LinkedNode cur = head.getNext();
        LinkedNode tmp=null;
        while (cur!=null){
            tmp=cur.getNext();
            cur.setNext(pre);
            pre=cur;
            cur=tmp;
        }
        head.setNext(null);
        return pre;
    }

}
class LinkedNode{
    private int data;
    private LinkedNode next;

    public LinkedNode(int data) {
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public LinkedNode getNext() {
        return next;
    }

    public void setNext(LinkedNode next) {
        this.next = next;
    }
}

斐波拉

这代码太垃圾有更好的方法

public class Fbi {
    public static void main(String[] args) {
        System.out.println(aa(6));
    }
    private static Integer aa(int n){
        if(n==1){
            return 0;
        }
        if(n==2){
            return 1;
        }
        return aa(n-1)+aa(n-2);
    }
}

判断链表是否有环

package com.dayup.algorithm.task.cy;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * @author zhz
 * @date 2021/12/7
 */
public class HaveCricle {
    public static void main(String[] args) {
        LinkedNode a = new LinkedNode(0);
        LinkedNode b = new LinkedNode(1);
        LinkedNode c = new LinkedNode(2);
        LinkedNode d = new LinkedNode(3);
        a.setNext(b);
        b.setNext(c);
        c.setNext(d);
        d.setNext(c);
        System.out.println(aa(a));
    }
private static Boolean aa(LinkedNode linkedNode){
    Set<LinkedNode> set=new LinkedHashSet<>();
    while (linkedNode!=null){
        if(!set.add(linkedNode)){return true;}
        linkedNode=linkedNode.getNext();
    }
    return false;

}

}

class LinkedNode{
    private int data;
    private LinkedNode next;

    public LinkedNode(int data) {
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public LinkedNode getNext() {
        return next;
    }

    public void setNext(LinkedNode next) {
        this.next = next;
    }
}

快速排序

package com.dayup.algorithm.task.kuaipai;

/**
 * @author zhz
 * @date 2021/12/9
 */
public class KuaiPai {
    public static void quickSort1(int[] arr,int low,int high) {
        if(low>high){return;}
        int i,j,tmp,t;
        i=low;
        j=high;
        tmp=arr[low];
        while (i<j){
            while (arr[j]>=tmp && i<j){
                j--;
            }
            while (arr[i]<=tmp && i<j){
                i++;
            }
            if(i<j) {
                t = arr[j];
                arr[j] = arr[i];
                arr[i] = t;
            }
        }
            arr[low] = arr[i];
            arr[i] = tmp;
        int test=j;
        quickSort1(arr,low,j-1);
        quickSort1(arr,test+1,high);
    }

    public static void main(String[] args) {
        int[] arr = {10, 7, 2, 4, 7};
        quickSort1(arr, 0, arr.length - 1);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值