算法小抄
爱吃柚子的梨
自勉联:
有志者事竟成破釜沉舟百二秦关终属楚
苦心人天不负卧薪尝胆三千越甲可吞吴
展开
-
【读书笔记:算法小抄】动态规划解决编辑距离问题——Java实现
简介可以对一个字符串进行三种操作:插入一个字符,删除一个字符,替换一个字符,给你两个字符串s1和s2,请计算将s1转换成s2最少需要多少次操作。代码import static java.lang.System.out;public class Helloworld { public static int minDistance(String s1, String s2){ int m = s1.length(), n = s2.length(); // 定义原创 2021-03-08 10:30:17 · 186 阅读 · 0 评论 -
【读书笔记:算法小抄】动态规划解决最长公共子序列问题——Java实现
描述LCS:最长公共子序列问题描述:求两个字符串的最长公共子序列的长度,例如输入str1 = “abcde”, str2 = “aceb”,算法应该输出3。代码import static java.lang.System.out;public class Helloworld { public static int LCS(String s1, String s2){ char[] s1_arr = s1.toCharArray(); char[] s2原创 2021-03-05 11:41:31 · 128 阅读 · 1 评论 -
【读书笔记:算法小抄】斜着遍历二维数组
简介本文参考书P113页代码,实现了右上和右下倾斜遍历二维数组,即:代码import static java.lang.System.out;public class Helloworld { public static void main(String[] args){ int n = 5; // 定义一个5*5的矩阵 out.println("右上倾斜遍历行列号"); for (int l = 1; l <= n; l++原创 2021-03-04 19:24:27 · 376 阅读 · 2 评论 -
【读书笔记:算法小抄】动态规划之最大子数组问题——Java实现
简介 最大子数组问题输入一个整数数组nums,请你在其中找一个和最大的子数组,返回这个子数组的和。例如输入nums = {-3, 1, 3, -1, 2, -4, -2},返回,因为最大子数组为{1, 3, -1, 2}代码import static java.lang.System.out;public class Helloworld { public static int maxSubArray(int[] nums){ if (nums.length == 0)原创 2021-03-03 21:43:10 · 278 阅读 · 1 评论 -
【读书笔记:算法小抄】二维递增子序列:信封嵌套问题——Java实现
Java常识排序基础对二维数组或者其他对象进行排序,常用Arrays.sort(T[] a, Comparator<? super T> c)。假如传入的是一个二维数组int[][] arr,那么被比较的对象就是arr[0],arr[1]一类的。实现Comparator接口通常需要定义Compare函数,且看Compare函数的文档解释:int compare(T o1, T o2)Compares its two arguments for order. Returns a neg原创 2021-02-26 17:02:00 · 374 阅读 · 0 评论 -
【读书笔记:算法小抄】最长递增子序列——Java实现
简介 最长递增子序列:输入一个无序的整数数组,请你找到其中最长递增子序列的长度。例如,输入nums=[10, 9, 2, 5, 3, 7, 101, 18],其中最长的递增子序列是[2, 3, 7, 101],算法输出4。 该题有两种主流的解法,一种是使用动态规划法,另一种为二分搜索解法。动态规划解法代码package com.company;import static java.lang.System.out;import java.util.*;public class Main {原创 2021-02-25 10:55:01 · 187 阅读 · 0 评论 -
【读书笔记:算法小抄】滑动窗口算法——Java版实现
算法实现列表最小覆盖子串Java基础HashMap中的getOrDefault(key, defaultValue)函数说明:如果map中没有key对应的键值value,则返回默认值defaultValue。参考代码最小覆盖子串给你两个字符串S和T,请你在S中找到包含T中全部字母的最短子串。 如果S中没有这样一个子串,则算法返回空串,如果存在这样一个字串,则可以认为答案是唯一的。比如输入S = “ADBECFEBANC”,T = “ABC”,算法应该返回“BANC”。package原创 2021-02-21 11:52:09 · 522 阅读 · 0 评论 -
【读书笔记:算法小抄】二分搜索算法——Java版实现
普通版(未统一)package com.company;import static java.lang.System.out;import java.util.*;public class Main { /* 二分搜索常见场景剖析 */ // 1. 寻找一个数(基本的二分搜索),搜索区间为[left, right] public static int binarySearch(int[] nums, int target){ int left = 0;原创 2021-02-20 15:26:11 · 161 阅读 · 0 评论 -
【读书笔记:算法小抄】左、右指针的常用算法(二分搜索、两数之和、反转数组)——Java实现
本节内容二分搜索;两数之和:输入一个已按照升序排列的有序数组nums和一个目标值target,在nums中找到两个数使得它们相加之和等于target,请返回这两个数的索引;反转数组。代码与解读package com.company;import static java.lang.System.out;import java.util.*;public class Main { /* 定义链表节点,属Main类的内部类*/ public class ListNode{原创 2021-02-18 22:43:34 · 124 阅读 · 0 评论 -
【读书笔记:算法小抄】快、慢指针的常用算法——Java版
算法列表判定链表中是否含有环已知链表中含有环,返回这个环的起始位置寻找无环单链表的中点寻找单链表的倒数第k个元素(k不超过链表的长度)代码package com.company;import static java.lang.System.out;import java.util.*;public class Main { /* 定义链表节点,属Main类的内部类*/ public class ListNode{ int val; Li原创 2021-02-17 12:16:11 · 154 阅读 · 0 评论 -
【读书笔记:算法小抄】解开密码锁最小次数·Java优化版
普通版package com.company;import static java.lang.System.out;import java.util.*;public class Main { public static String plusOne(String s, int j){ char[] ch = s.toCharArray(); if (ch[j] == '9') ch[j] = '0'; else原创 2021-02-14 11:14:40 · 335 阅读 · 2 评论 -
【读书笔记:算法小抄】BFS·二叉树最小高度——Java版实现
Java队列的基本使用Java Queue Implementations(实现)一般使用Linkedlist<>()实现其实例。Add Element to Queue(添加)add队满使用add抛异常offer队满使用offer返回falseTake Element From Queue(取出)remove队空使用抛异常poll队空使用返回nullPeek at the Queue(查看)element()队空使用抛异常peek()队空使用返回nu原创 2021-02-12 11:44:23 · 249 阅读 · 1 评论 -
【读书笔记:算法小抄】回溯算法·N皇后算法——Java版实现(以八皇后为案例)
Java代码实现package com.company;import static java.lang.System.in;import static java.lang.System.out;import java.util.*;public class Main { public static ArrayList<char[][]> res; public static void fillBoard(char[][] board){ for (i原创 2021-02-10 23:07:36 · 123 阅读 · 0 评论 -
【读书笔记:算法小抄】回溯算法·全排列——Java实现
回溯算法解全排列package com.company;import static java.lang.System.out;import java.util.*;public class Main { static List<List<Integer>> permute(int[] nums, List<List<Integer>> trackList){ // 回溯法求全排列 LinkedList<原创 2021-02-02 10:21:33 · 145 阅读 · 0 评论 -
【读书笔记:算法小抄】动态规划·凑零钱问题Java版实现
前言本文思想和借鉴代码皆源自《labuladong的算法小抄一书》,博客所连载的算法小抄系列为该书的读书笔记。原书中用Python实现了凑零钱问题,现用Java实现,以检验学习成果。普通递归算法package com.company;import static java.lang.System.out;import java.util.*;public class Main { // amount为要凑零钱的金额,coins为硬币的种类,dp返回凑出目标金额amount最少所需的硬币原创 2021-01-30 11:01:56 · 1027 阅读 · 1 评论 -
【读书笔记:算法小抄】动态规划·斐波那契数列C++优化代码实现
自顶向下的备忘录优化算法#include <iostream>#include "vector"using namespace std;int helper(int N, vector<int>& memo);int fib(int N){ if (N == 0) return 0; vector<int> memo(N+1, 0); return helper(N, memo);}int helper(int原创 2021-01-29 11:29:56 · 294 阅读 · 0 评论