LeetCode
-玫瑰少年-
别管,拼!
展开
-
数组->list、list->数组
java基础编程50题之_36https://blog.csdn.net/qq_29534483/article/details/80107224转载 2020-04-04 22:25:59 · 149 阅读 · 0 评论 -
1095. 山脉数组中查找目标值
一个数组,前半段升序后半段降序,查找某个值在数组中的最小下标:第一步应当找到最大值,如何找到最大值—二分查找,用到二分查找的一些例题,这些例题只是在区间的判断条件上不同而已。...原创 2020-10-29 09:11:00 · 168 阅读 · 0 评论 -
72. 编辑距离
注:一旦涉及到子问题,有两种解决思路:自顶向下的递归自底向上的动态规划class Solution { public int minDistance(String word1, String word2) { //方法一:递归 int len1 = word1.length(), len2 = word2.length(); //如果word1.length() == 0, 我们每次都进行插入操作即可 //如果word2原创 2020-10-26 12:00:50 · 82 阅读 · 1 评论 -
回溯算法例题
78.子集90.子集ii46.全排列47.全排列ii39.组合总和40.组合总和ii原创 2020-10-24 17:54:20 · 188 阅读 · 0 评论 -
int和String类型的相互转化
int 转 String:int a = Integer.parseInt(str);int b = Integer.valueOf(str).intValue();String 转 int:String.valueOf(int i)Integer.toString(int i)i+""; //i 为 int类型三种方法效率排序:Integer.toString(int i) > String.valueOf(int i) > i+"";...原创 2020-10-21 09:17:26 · 359 阅读 · 0 评论 -
449.序列化与反序列化二叉树
public class Codec { //序列化为后序遍历序列,同样也是有后序遍历序列反序列化为二叉搜索树 public StringBuilder postorder (TreeNode root, StringBuilder sb) { if(root == null) return sb; postorder(root.left, sb); postorder(root.right, sb); sb.append(.原创 2020-10-20 09:37:01 · 80 阅读 · 0 评论 -
15.三数之和
class Solution { public List<List<Integer>> threeSum(int[] nums) { //排序+双指针 List<List<Integer>> res = new ArrayList<List<Integer>>(); Arrays.sort(nums); for(int k = 0; k < nums.len.转载 2020-10-19 17:49:25 · 70 阅读 · 0 评论 -
1143. 最长公共子序列
审题最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问题都和这个问题一个套路,比如说编辑距离。而且,这个算法稍加改造就可以用于解决其他问题,所以说LCS算法是值得掌握的。所谓子序列,就是要保留原始顺序,但可以是不连续的。审题之后你可能会有疑问,这个问题为啥就是动态规划来解决呢?因为子序列类型的问题,穷举出所有可能的结果都不容易,而动态规划算法做的就是穷举 + 剪枝,它俩天生一对儿。所以.转载 2020-10-19 16:49:03 · 75 阅读 · 0 评论 -
丑数
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。解题思路很多题解都讲解了动态规划的基本思路, 但是, 对于为什么要设置 3 个指针 p2, p3, p5 并且进行相应的 +1 操作, 并没有讲的很清楚。丑数的定义我们把只包含因子 2、3 和 5 的数称作丑数.根据题意, 一个丑数必然可以写为 A0转载 2020-10-05 16:31:32 · 110 阅读 · 0 评论 -
n整数中1出现的次数 / 数字 1 的个数
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。示例 1:输入:n = 12输出:5示例 2:输入:n = 13输出:6解题思路f(n))函数的意思是1~n这n个整数的十进制表示中1出现的次数,将n拆分为两部分,最高一位的数字high和其他位的数字last,分别判断情况后将结果相加,看例子更加简单。例子如n=1234,high=1, pow=1000, last=234可以将数原创 2020-10-05 12:13:46 · 542 阅读 · 0 评论 -
n & (n - 1)的用法
(n−1) 解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。n & (n - 1) 解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。例题1:剑指 Offer 15. 二进制中1的个数请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。public class Solution { public int hammingWe原创 2020-09-24 20:14:04 · 3231 阅读 · 0 评论 -
剪绳子/整数分割
一、暴力搜索(递归):对于给定的一个整数 n,穷举它的每一种分解情况,然后对所有情况,求最大值。并且我们知道,n 可以拆成如下情况:通过上图,我们很容易得到一个递归表达式:F(n) = max {i * F(n - i)},i = 1,2,… ,n - 1F(n)=max{i∗F(n−i)},i=1,2,…,n−1上述表达式是表明n - i需要继续分解的情况,但如果n - i比F(n - i)要大,显然就不用再继续分解了。故我们还需要比较i * (n - i)与i * F(n - i)的大小关原创 2020-09-22 22:45:46 · 108 阅读 · 0 评论 -
判断一棵树是否是完全二叉树
一边对二叉树进行BFS将每一个节点都加入到队列,一边执行下面的判断当前节点有右孩子,但没有左孩子,直接返回false当前节点有左孩子没右孩子 或者 当前结点左孩子右孩子都没有,那么接下来遇到的所有节点必须是叶子节点public static boolean check(Node head) { boolean leaf = false; // 后面的结点是否必须是叶子结点 Queue<Node> q = new LinkedList<Node>();原创 2020-07-20 10:29:42 · 205 阅读 · 0 评论 -
LeetCode之LRU缓存机制
LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。进阶:你是否.原创 2020-05-25 10:52:33 · 424 阅读 · 0 评论 -
LeetCode-----Z字形变换
package com.leetcode;import java.util.ArrayList;import java.util.Arrays;import java.util.List;/** * @author shihao * @create 2020-04-15 18:44 */public class Z字形变换 { public static void m...原创 2020-04-16 11:06:55 · 148 阅读 · 0 评论