leetcode
文章平均质量分 91
三分迷惘
没有谁可以一直陪着谁,每个人都只能陪你走一段路
展开
-
Java kmp算法记录
public class kmpTest { public static void main(String[] args) { String s1 = "StrStqString"; String s2 = "String"; int i = IndexOfKmp(s1 , s2); System.out.println(i); } /** * 朴素算法 * @return */原创 2020-10-21 10:48:58 · 138 阅读 · 0 评论 -
插值查找
//你已经一无所有了 static int search(int [] arr , int i){ int len = arr.length; int ln = 0 , rn = len - 1 , mid; while(ln <= rn){ mid = ln + (i - arr[ln]) / (arr[rn] - arr[ln]) * (rn - ln); if(arr[mid] == i){.原创 2020-07-31 15:25:18 · 136 阅读 · 0 评论 -
斐波那契查找
static void Fibonacci(int [] farr) { int len = farr.length; farr[0]=0; farr[1]=1; for(int i=2;i<len ;++i) farr[i]=farr[i-1]+farr[i-2]; }static int search(int [] arr , int n , int key){ int l.原创 2020-07-31 15:24:26 · 135 阅读 · 0 评论 -
二分查找
static int search(int [] arr , int i){ int len = arr.length; int ln = 0 , rn = len - 1 , mid ; while(ln <= rn){ mid = ln + ( rn - ln ) / 2; if(arr[mid] == i){ return mid; }原创 2020-07-31 15:23:11 · 125 阅读 · 0 评论 -
快速排序
static void quick(int [] arr , int start , int end){ if(start >= end){ return; } int mid = pr(arr , start , end); quick(arr , start , mid - 1); quick(arr , mid + 1 , end); } private static in原创 2020-07-31 15:20:17 · 128 阅读 · 0 评论 -
选择排序
static void sort(int [] arr){ int len = arr.length; for(int i = 0 ; i < len - 1 ; ++i){ int tmp = i; for(int j = i + 1 ; j < len ; ++j){ if(arr[j] < arr[tmp]){ tmp = j;原创 2020-07-31 15:17:49 · 121 阅读 · 0 评论 -
希尔排序
/** * 希尔排序 * @param arr */ static void sort(int [] arr){ int len = arr.length; int start = len / 2; for( ; start > 0 ; start /= 2){ for(int i = start ; i < len ; ++i){ int j = i;原创 2020-07-31 15:17:17 · 90 阅读 · 0 评论 -
直接插入排序
static void sort(int [] arr){ int len = arr.length; int i , j , tmp; for(i = 1 ; i < len ; ++i){ tmp = arr[i]; for(j = i - 1 ; j >= 0 && arr[j] > tmp ; --j){ arr[j+1] = arr[j]原创 2020-07-31 15:16:47 · 82 阅读 · 0 评论 -
基数排序
static void sort(int [] arr){ int len = Math.max(10 , arr.length); int max = Integer.MIN_VALUE; for(int v : arr){ max = Math.max(max , v); } int n = 1 ; int k = 0 ; int [][] bucket = new i原创 2020-07-31 15:16:17 · 89 阅读 · 0 评论 -
桶排序
static void sort(int [] arr){ int max = Integer.MIN_VALUE; int min = Integer.MAX_VALUE; for(int v : arr){ max = Math.max(max , v); min = Math.min(min , v); } int len = arr.length; //分原创 2020-07-31 15:15:13 · 159 阅读 · 0 评论 -
计数排序
static void sort(int [] A , int [] B){ int max = Integer.MIN_VALUE; for(int v : A){ max = Math.max(v , max); } int k = max + 1; int [] C = new int[k]; for(int v : A){ C[v] += 1; ..原创 2020-07-31 15:14:14 · 99 阅读 · 0 评论 -
堆排序
上篇建立最大堆接下来开始堆排序 , 以及优化之前代码static void maxheapity(int [] num , int i , int length){ int ln = 2 * i + 1; int rn = 2 * i + 2; int largest = 0; if( ln < length && num[ln] > num[i]){ largest = ln;原创 2020-07-16 14:41:08 · 99 阅读 · 0 评论 -
堆排序 -- 建堆(最大堆)
首先要熟悉堆的一个重要性质:max-Heapify(每一步都从左子树、右子树、num[i]选择最大值作为根结点 , 如果第一步num[i]为最大值 , 那么以i为根结点的子树已经是最大堆了,如果左子树亦或者右子树作为最大值 , 那么推测该节点作为跟的子树可能违反最大堆的性质, 因此需要继续递归) static void max-Heapify(int [] num , int i ){ int ln = 2 * i + 1; int rn = 2 * i + 2;原创 2020-07-06 21:59:44 · 750 阅读 · 0 评论 -
归并排序 —— 递归和非递归版本
递归版本: /** * 递归 归并排序 * @param num * @param start * @param end */ public static void merge_sort(int [] num , int start , int end){ if(start == end) { return; } int mid = start + ((end - start原创 2020-07-02 09:11:58 · 175 阅读 · 0 评论 -
leetcode 分治策略最大子数组问题
分三种情况:1.完全位于nums[start,mid]中 , 因此start <= i <= j <= mid;2.完全位于nums[mid+1 , end]中,因此mid < i <= j <=end3.跨越了中点 , 因此start <= i <= mid <= j <= end;class Solution { public int maxSubArray(int[] nums) { return megreM原创 2020-07-01 22:20:33 · 136 阅读 · 0 评论