
数据结构与算法
WhyNotFocus
From Qust to Seu!Major in Automation!
展开
-
leetcode120三角形最小路径和
思路分析:如果用dp[i]表示层数为i的三角形的最小路径和这种情况下状态转移会非常困难因此需要改变想法题解中使用dp[i][j]来表示(i,j)处的最小路径和,即顶点到该位置的最小路径和如此一来dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+tri.get(i).get(j)两个特殊的位置需要考虑,即每一行的左边界和右边界,比如左边界没有对应的j-1;base case:dp[0][0]=tri.get(0).get(0)这里为了方便构造了int[length].原创 2021-05-19 20:28:27 · 129 阅读 · 0 评论 -
leetcode91解码方法:状态转移的多个情况考虑
思路:dp[i]表示字符串索引0到索引i的子串的映射数接下来就是考虑dp[i]和dp[i-1]的关系首先考虑st[i]是不是’0’如果是,再看st[i-1]和st[i]组成的数字是不是在1到26之间****如果在,则dp[i]=dp[i-2] (要判定边界)****如果不在,则dp[i]=0如果不是,则还要再判断st[i-1]是不是’0’接下来的判断直接看代码public static int numDecodings(String s) { char[] st=s.toCharA..原创 2021-05-19 16:26:51 · 139 阅读 · 0 评论 -
leetcode64最小路径和:按照不同路径的思路来就很好解决
思路分析:dp[i][j]表示(0,0)到(i,j)的最小路径和那么dp[i][j]就等于min(dp[i-1][j],dp[i][j-1])+grid[i][j]base case就是第一行逐个累加,第一列逐个累加详情见代码:class Solution { public int minPathSum(int[][] grid) { int row=grid.length; int col=grid[0].length; int[][] .原创 2021-05-18 20:57:51 · 128 阅读 · 0 评论 -
leetcode63不同路径2:相对于不同路径1主要在于base case的差别
base case分析当第一行或第一列出现1的时候,剩余的列或行就可以赋值为0迭代时只需要算没有障碍的位置有障碍的位置提前赋值为0dp[i][j]表示从左上角(0,0)到(i,j)处的路径总数class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { int row=obstacleGrid.length; int col=obstacleGrid[0].l..原创 2021-05-18 14:48:36 · 186 阅读 · 0 评论 -
leetcode5最长回文子串:如何巧妙构建dp数组和状态转移
如何构造dp数组一开始想到的是dp[i][j]表示索引i到索引j之间的最长回文子串,然后我们的目标是d[0][length-1];基于此定义,如果要构造状态转移,会发现异常困难;题解中采用的是dp[i][j]表示索引i到索引j之间的字符串是否为回文子串即第一个的返回值为int,第二个的返回值为boolean基于第二个定义,构造状态转移会非常容易dp[i][j]=dp[i+1][j-1] && (st[i]==st[j])即如果一个字符串本身为回文串,那么两边各加上相同的单个字.原创 2021-05-18 11:11:14 · 174 阅读 · 1 评论 -
Leetcode62不同路径:带备忘录的递归法和动态规划法
1.题目描述2.带备忘录的递归法本方法两个重点:递归和备忘录递归(自顶向下):以斐波那契数列为例,要求f(n),则需要先知道f(n-1)和f(n-2),以此类推,最终需要f(1)和f(2)这两个base case。得到这两个base case之后我们再逐层返回结果,即可得到f(n).备忘录(重叠子问题):如果将上述递归以树的形式画出来,可以看出很多的树枝是重复的,这就是重复子问题,其缺点是重复计算,浪费运行时间。解决方法是利用备忘录,将计算过的节点存储起来,当其他分支需要用到该节点的时候直接调原创 2021-05-17 15:01:38 · 915 阅读 · 1 评论 -
java数据结构与算法之二分查找与插值查找
BinarySearch.javapackage com.zhanglei.binarysearch;import java.util.ArrayList;import java.util.List;public class BinarySearch { public static void main(String[] args) {// TODO Auto-generated method stub int[] arr= {0,1,2,3,4,5,6,7,8,8,8,8,8,9,原创 2021-03-30 15:01:13 · 272 阅读 · 3 评论 -
java数据结构与算法之排序之归并排序
归并排序MergeSorting.java备注:备注3MergeSorting.javapackage com.zhanglei.mergesorting;import java.util.Arrays;public class MergeSorting { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr= new int[] {2,1,4,3,5,6,8,6,原创 2021-03-25 16:54:15 · 123 阅读 · 1 评论 -
java数据结构与算法之排序之快速排序
QuickSorting.javapackage com.zhanglei.quicksorting;import java.util.Arrays;public class QuickSorting { public static void main(String[] args) { // TODO Auto-generated method stub int[] arr= {-9,0,78,0,23,0,-567,70}; quickSort(arr, 0, arr.lengt原创 2021-03-24 16:56:11 · 199 阅读 · 0 评论 -
java数据结构与算法之排序之插入排序
InsertionSorting.javapackage com.zhanglei.insertionsorting;public class InsertionSorting { public static void main(String[] args) { // 前瞻:插入的话涉及数据的大量移动,用数组应该不合适,应该用链表 // 后续:老师用的数组,而且只用原来的无序数组,只用了几秒钟,我用了下面的链表,耗时21秒// int[] a=new int[] {1,2,3,6,5,原创 2021-03-23 09:57:18 · 138 阅读 · 0 评论 -
java数据结构与算法之排序之选择排序
SelectionSorting.javapackage com.zhanglei.selectionsorting;public class SelectionSorting { public static void main(String[] args) { // TODO Auto-generated method stub int[] a=new int[] {2,1,3,6,5,4}; int index=0;//用于指示最小值的索引 for(int i=0;i<a原创 2021-03-22 15:40:41 · 141 阅读 · 0 评论 -
java数据结构与算法之排序之冒泡排序
冒泡排序BubbleSorting.java(未优化)备注BubbleSortingOptimized.java(已优化)备注:BubbleSortingSpeedMeasuring.java(测速)备注:BubbleSorting.java(未优化)package com.zhanglei.bubblesorting;public class BubbleSorting { public static void main(String[] args) { // TODO Auto-gene原创 2021-03-22 14:29:00 · 174 阅读 · 0 评论