• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






坚持,简单

因为坚持,所以简单
 
 

Powered by 博客园
博客园 | | 新随笔 | 联系 | | 管理

随笔分类 -  算法

 
动态规划1:斐波那契数列
摘要:斐波那契数列指的是这样一个数列:1 1 2 3 5 8 13 21 34..... 这个数列从第3项开始,每一项都等于前两项之和,用方程表示:dp[i]=dp[i-1]+dp[i-2]; 原始递归实现: public long dp(int n) { if(n==0||n==1) return 1; 阅读全文
posted @ 2021-10-24 13:57 坚持,简单
动态规划5:两个字符串的最长公共子序列
摘要:字符串a,长度为m:a[1].a[2].a[3].a[4]....a[m] 字符串b,长度为n:b[1].b[2].b[3].b[4]....b[n] 比如字符串a:BDCABA;字符串b:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA或者BDAB,可以不用连续 1 阅读全文
posted @ 2021-10-24 13:57 坚持,简单
动态规划2:爬楼梯
摘要:假设你正在爬楼梯。需要 n 阶(正整数)你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 1.假如,你现在已经爬到楼顶了,你是怎么上来的? 有两种可能:一是从倒数第一个楼梯爬了一个台阶上来的;二是从倒数第二个楼梯爬了两个台阶上来的 2.假如,你现在已经爬到倒数第 阅读全文
posted @ 2021-10-24 13:56 坚持,简单
动态规划6:两个字符串的最长连续公共子串
摘要:本文和前一篇:动态规划5:两个字符串的最长公共子序列类似,但公共子串必须是连续的,子序列不需要连续 字符串a,长度为m:a[1].a[2].a[3].a[4]....a[m] 字符串b,长度为n:b[1].b[2].b[3].b[4]....b[n] 比如字符串a:abcbced;字符串b:acbc 阅读全文
posted @ 2021-10-24 13:55 坚持,简单
动态规划4:不同路径
摘要:一个机器人位于一个 m x n 网格的左上角,机器人每次只能向下或者向右移动一步,机器人试图达到网格的右下角 问总共有多少条不同的路径? 因为不能往上走,所以位于开始节点的第一层, 只能从左边一个格走到右边一格,可能的路径只能有1种; 因为不能往左走,所以位于开始节点的第一列, 只能从上边一个格走到 阅读全文
posted @ 2021-10-24 13:55 坚持,简单
动态规划7:最长上升子序列
摘要:leetcode 300: 给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 数组用a[n]表示,最长子序列的长度用dp[n]来表示,即数组从0-i元素时,最 阅读全文
posted @ 2021-10-24 13:52 坚持,简单
动态规划3:零钱兑换
摘要:给定不同面额的硬币 coins 和一个总金额 amount,可以有多个不同的拼凑方法? 一:coins = [1, 2], amount = 101.假如,你现在有十块钱硬币了,你是怎么凑够的?有两种可能:一是先要有9块钱再加上一块钱的硬币,二是先要有8块钱再加上一个两块的硬币2.这9块钱怎么来的? 阅读全文
posted @ 2021-10-24 13:52 坚持,简单
动态规划8:乘积最大子数组
摘要:leetcode 152:给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。 分析:题目求最大乘积,同样,用a[n]表示数组,用dp[ 阅读全文
posted @ 2021-10-24 13:47 坚持,简单
动态规划9:最长回文子串
摘要:leetcode 5:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "dcabac"输出: "cabca",从左边读和从右边读一样 1.数组str[n]的dp[i][j]要是回文串的话,要满足str[i]等于str[j],且dp[i+1][ 阅读全文
posted @ 2021-10-24 13:46 坚持,简单
动态规划10:三角形的最小路径和
摘要:leetcode 120:三角形的最小路径和 给定一个金字塔三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [ 阅读全文
posted @ 2021-10-24 13:45 坚持,简单
动态规划12:股票最佳买卖时机系列
摘要:一.leetcode 121:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天 阅读全文
posted @ 2021-10-24 13:44 坚持,简单
动态规划11:编辑距离
摘要:leetcode 72:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = "horse", word2 = "ros"输出:3解释:hor 阅读全文
posted @ 2021-10-24 13:44 坚持,简单
动态规划13:股票最佳买卖时机系列
摘要:五.接上一篇 leetcode 123:你最多可以完成 两笔 交易 dp1数组存储第`i`天,持有股票的最大利润dp2数组存储第`i`天,不持有股票的最大利润 增加一个维度,交易次数, 0-还有两次交易机会 1-表示还有一次交易机会 dp1[0][i] = Math.max(dp1[0][i-1], 阅读全文
posted @ 2021-10-24 13:43 坚持,简单
排序算法:1.堆排序,你真的懂了吗?
摘要:的确,在实际项目开发过程中,很少用到算法,导致对算法不太感冒,总是一知半解。最近打算leetcode上刷算法题,但基础不好,感觉真的寸步难行,所以还得踏踏实实的从基础抓起。今天就彻底理解一下堆排序,没有谁比谁聪明,努力终究能见到回报。 一.堆 1.堆是什么?这里的堆, 是指二叉堆,可以理解成就是数组 阅读全文
posted @ 2021-10-24 13:40 坚持,简单
排序算法:2.堆的应用
摘要:接上一篇,二叉堆实际的应用 一.java定时器对象Timer,里面就是维护着数组实现的二叉堆,最先要到期的任务放在数组中第一个位置,第一个位置出队后,剩下的数组再通过下沉上浮变形成新的二叉堆;依次下去成一个定时器。 1.问题:为什么不直接一下子排好顺序? 答案很简单,因为不需要,定时任务只要知道下一 阅读全文
posted @ 2021-10-24 13:39 坚持,简单