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]);
}
}
}