leetcode
底格里歇斯
这个作者很懒,什么都没留下…
展开
-
再谈二分查找
**什么是二分查找就不用多说了吧**二分查找太常见了,以至于代码都不用思考就能写,但今天忽然发现了一些问题,仔细思考原来有很多细节并没有特别理解,所以记录一下!二分查找的本质就是在有序数组中查找到目标值。看似简单,但里面也有很多情况,比如存在重复target时,要返回第一个target值。二分查找:时间复杂度: O ( l o g n ) O(log~n) O(log n),原因在于每次把搜索区域减少一半空间复杂度: O(1)使用条件:有序数组二分查找就是将数组二分通过中间值与tar原创 2021-07-07 09:37:43 · 195 阅读 · 0 评论 -
排序算法总结
插入排序public void insertSort(int []a){ if(a!=null) {int temp; for(int i=1;i<a.length;i++){ temp = a[i]; int j=i; while(j>0&&a[j-1]>temp){原创 2020-07-09 14:03:05 · 158 阅读 · 0 评论 -
字符串匹配
1、leetcode44、通配符匹配给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配。 '?' 可以匹配任何单个字符。 '*' 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 的小写字母。 p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。输入:s = "aa"p = "a"输出: false解释:原创 2020-07-06 15:31:22 · 841 阅读 · 0 评论 -
不同的二叉搜索树
上来着实被吓了一跳。定义一个数组 dp[i]用来表示i个节点可以定义多少种二叉树。一棵二叉树有多少种定义方式:左孩子节点数的种类右孩子节点的种类根节点的个数第二层循环表示i个节点时,第j个节点作为根节点的情况public int numTrees(int n) { int[] dp = new int[n+1]; dp[0]=1; dp[1]=1; for(int i=2;i<=n;i++){ for(in原创 2020-07-05 18:18:49 · 256 阅读 · 0 评论 -
leetcode91、 解码方法
思路:以dp[i]来记录第i个字符之前有多少种解码方法。如果x==‘0’,且y==‘0’,无法解码,返回0;如果只有x==‘0’,则y只能单独放在最后,不能与x合并(不能以0开头),此时有:dp[i] = dp[i-1]如果只有y==‘0’,则y不能单独放置,必须与x合并,并且如果合并结果大于26,返回0,否则有:dp[i] = dp[i-2]如果 xy<=26: 则y可以“单独”放在abcx的每个解码结果之后后,并且如果abcx以x单独结尾,此时可以合并xy作为结尾,而这种解码种数就是a原创 2020-07-05 17:36:11 · 2599 阅读 · 0 评论 -
leetcode不同路径
1、leetcode62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径?输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向右 -> 向下2. 向右 -> 向下 -> 向右3. 向下 -> 向右 -&g原创 2020-07-05 15:42:13 · 276 阅读 · 0 评论 -
leetcode5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。输入: "cbbd"输出: "bb"思路:字符串类的dp这道题比较烦人的是判断回文子串。因此需要一种能够快速判断原字符串的所有子串是否是回文子串的方法,于是想到了「动态规划」。「动态规划」的一个关键的步骤是想清楚「状态如何转移」。事实上,「回文」天然具有「状态转移」性质。一个回文去掉两头以后,剩下的部分依然是回文(这里暂原创 2020-07-05 15:04:34 · 142 阅读 · 0 评论 -
leetcode-打家劫舍专题
198. 打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = 4 。输入:[2,原创 2020-07-05 10:15:39 · 249 阅读 · 0 评论 -
leetcode63 股票的最大利润
题目链接:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/比较简单的动态规划。思路:状态定义: 设动态规划列表 dpdpdp ,dp[i]dp[i]dp[i] 代表以 prices[i]prices[i]prices[i] 为结尾的子数组的最大利润(以下简称为 前 iii 日的最大利润 )。转移方程: 由于题目限定 “买卖该股票一次” ,因此前 iii 日最大利润 dp[i]dp[i]dp[i] 等于前 i−1i - 1i原创 2020-07-04 16:33:17 · 189 阅读 · 0 评论 -
leetcode46全排列
全排列我的github地址:leetcode给定一个 没有重复 数字的序列,返回其所有可能的全排列。输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思想:找一个数组的全排列,肯定是回溯算法了,搜索一般就是dfs“回溯”指的是“状态重置”,可以理解为“回到过去”、“恢复现场”,是在编码的过程中,是为了节约空间而使用的一种技巧。而回溯其实是“深度优先遍历”特有的一种现象。之所以.原创 2020-07-04 10:25:17 · 288 阅读 · 0 评论 -
Leetcode 1125:最小的必要团队
作为项目经理,你规划了一份需求的技能清单 req_skills,并打算从备选人员名单 people 中选出些人组成一个「必要团队」( 编号为 i 的备选人员 people[i] 含有一份该备选人员掌握的技能列表)。所谓「必要团队」,就是在这个团队中,对于所需求的技能列表 req_skills 中列出的每项技能,团队中至少有一名成员已经掌握。我们可以用每个人的编号来表示团队中的成员:例如,团队 team = [0, 1, 3] 表示掌握技能分别为 people[0],people[1],和 people[原创 2020-07-03 22:18:27 · 3705 阅读 · 1 评论 -
LinkedList
LinkedList底层是双向链表实现,可以作为FIFO(先进先出)的队列,也可以作为LIFO(后进先出)的栈。 LinkedList<String> list = new LinkedList<String>(); list.add("1");//如果不指定索引的话,元素将被添加到链表的最后. list.add("2"); list.add("3"); list.add("4"); list.add("5"); list.size();//返回list元素个数.原创 2020-05-29 18:59:53 · 170 阅读 · 0 评论 -
String类的常用方法
String不可改变。想要对字符串进行改变,可以使用StringBuilder和StringBuffer。最后toString。1、String s1 =“hello”;可能创建一个或者不创建对象,如果"hello"这个字符串在java String池里存在,就不会创建对象,将s1指向内存地址。如果不存在,则会在java String池里创建一个String对象(“hello”),然后s1指向这个内存地址。String s2 = new String(“hello”);至少创建一个对象,也可能两个。因原创 2020-05-16 09:23:26 · 268 阅读 · 0 评论 -
Hashmap遍历及排序
hashmap元素排序想要hashmap中的元素有序可以使用linkedHashMap。HashMap<Integer, User> hashMap = new HashMap<>(); hashMap.put(1,new User("张三",32)); hashMap.put(2,new User("张四",33)); hashMap.put(3,new User("王五",22));//将map转换为一个entry类型的lis原创 2020-05-16 08:51:12 · 552 阅读 · 0 评论