
LeetCode
特别喜欢用图来解释解题思路
城溪羡鱼
写博客少说废话
展开
-
每日一题-力扣62-不同路径
原题不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?思路首先理清题意只能下或者右移,从左上角走到右下角有多少种方案?走和不走的问题,明显可以用动态规划。最终解是由子问题总结的,也就是走到最终节点的方案数=由走到它左边和上边节点的方案种数之和从1x1矩阵到2x2矩阵思考代码class Solution {原创 2020-12-09 22:25:45 · 300 阅读 · 0 评论 -
leetCode-328奇偶链表
奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6-..原创 2020-11-13 19:37:30 · 112 阅读 · 0 评论 -
leetCode-31下一个排列
下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1举个栗子[2,2,7,5,4,3,2,2,1],想让下一个比他大排列字典序列,应该是2,7这个位置的2,为什么呢,因为7,5,4,3,2,2,1一直是降序.原创 2020-11-10 11:23:02 · 86 阅读 · 0 评论 -
leetCode-1365有多少小于当前数字的数字
有多少小于当前数字的数字给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。以数组形式返回答案。*示例 1:输入:nums = [8,1,2,2,3]输出:[4,0,1,1,3]解释:对于 nums[0]=8 存在四个比它小的数字:(1,2,2 和 3)。对于 nums[1]=1 不存在比它小的数字。.原创 2020-10-26 10:03:10 · 197 阅读 · 0 评论 -
leetCode-763划分字母区间
划分字母区间字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。提示:S的长度在.原创 2020-10-22 10:31:34 · 138 阅读 · 0 评论 -
leetCode-143重排链表
重排链表给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.解题思路:双层遍历,每次找到head tail.原创 2020-10-20 10:18:18 · 151 阅读 · 0 评论 -
leetcode-24两两交换链表中的节点
两两交换链表中的节点给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]思路(节点交换,不能使用值交换,特别注意这个要求)划分成子问题,设要交换的节点为X1和X2节点,用tail来接收后续尾部。那么X2——>X1——>tail。然后让已经排好的—.原创 2020-10-13 16:28:37 · 106 阅读 · 0 评论 -
leetcode-416分割等和子集【dp】
分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.解题思路:动态规划两个元素和相等的子集,所以子集的值为总和sum的一半,也就是说sum必.原创 2020-10-12 21:46:35 · 142 阅读 · 0 评论 -
leetcode-142力扣环形链表 II
环形链表 IIslow指针移动速度为1fast指针移动速度为2同时开始移动实心点为相遇点,当slow慢指针与fast指针相遇时,起点到相遇点的距离为r,即slow走了r的距离,相同时间按照fast速度可见它走了2r的距离。故起始点到相遇点为r距离;相遇点到相遇点距离为2r-r。问题是寻找链表开始入环的第一个节点,第一个入环点到相遇点为公共边,那么此时一个指针从起始出发一个指针从相遇点出发,以相同速度,必然会在第一个入环点相遇。(因为距离和速度相同)public class Soluti.原创 2020-10-12 14:23:29 · 116 阅读 · 0 评论 -
力扣141-环形链表【快慢指针】
环形链表/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public boolean hasCycle(ListNode h.原创 2020-10-09 15:43:09 · 162 阅读 · 0 评论 -
力扣11-盛最多水的容器
“盛最多水的容器”给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。示例:输入:[1,8,6,2,5,4,8,3,7]输出:49class Solution { public int maxArea(int[] height) { .原创 2020-09-30 21:21:08 · 413 阅读 · 0 评论 -
力扣701-二叉搜索树中的插入操作
二叉搜索树中的插入操作给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果。例如, 给定二叉搜索树: 4 / \ 2 7 / \1 3和 插入的值: 5你可以返回这个二叉搜索树: 4 / \ 2 7 / \ /1 .原创 2020-09-30 21:12:03 · 138 阅读 · 0 评论 -
力扣145-二叉树的后序遍历【递归】【迭代算法】
二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归算法实现后序遍历class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res=new ..原创 2020-09-29 18:06:55 · 247 阅读 · 0 评论 -
力扣21-合并两个有序链表【归并排序】
合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { if(l1==null)return l2; if(l2..原创 2020-09-26 16:41:55 · 310 阅读 · 0 评论 -
力扣113-路径总和 II【bfs】
路径总和 II给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。说明: 叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1返回:[[5,4,11,2],[5,8,4,5]]class Solution ..原创 2020-09-26 15:40:10 · 241 阅读 · 0 评论 -
力扣28-实现 strStr()【滑动窗口】
实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1说明:当 needle 是空字符串时,我们应当返回什么值呢?这是..原创 2020-09-26 15:31:47 · 129 阅读 · 0 评论 -
力扣404-左叶子之和
计算给定二叉树的所有左叶子之和。示例:3/ |9 20/ |15 7在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24思路:查询所有子节点之和再减去右子节点的值/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int原创 2020-09-19 11:15:06 · 132 阅读 · 0 评论 -
力扣203-移除链表元素
删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5比如说 目标值val=3删除32 3 4headhead.next.val==3?to deletehead.next=head.next.next首部怎么办?搞个伪头(哨兵)0 2 3 4sentiel.原创 2020-09-15 19:32:09 · 122 阅读 · 0 评论 -
力扣209-长度最小的子数组【双指针】
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。示例:输入:s = 7, nums = [2,3,1,2,4,3]输出:2解释:子数组 [4,3] 是该条件下的长度最小的子数组。进阶:如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems.原创 2020-09-14 21:05:22 · 281 阅读 · 0 评论 -
力扣94-二叉树的中序遍历【中序遍历】
给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]12/3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?理解中序遍历是左子树、根、右子树。这个是同一个规律适用于整个树,所以使用递归。结束条件为没有发现值,即节点为null。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;.原创 2020-09-14 19:27:44 · 246 阅读 · 0 评论 -
力扣19-删除链表的倒数第N个节点【快慢指针】
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。官方的答案class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ListNode dummy = new ListNo.原创 2020-09-13 17:42:07 · 95 阅读 · 0 评论 -
力扣39-组合总和【递归】【回溯】【DFS】
给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合。示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[[7],[2,2,3]]示例 2:输入:candidates = [2,3,5], target = 8,所.原创 2020-09-12 21:17:16 · 296 阅读 · 0 评论 -
力扣26-删除排序数组中的重复项【双指针】
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数组 nums .原创 2020-09-12 15:45:23 · 381 阅读 · 0 评论 -
力扣27-移除元素【双指针】
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,0,4,2.原创 2020-09-12 14:44:52 · 229 阅读 · 0 评论 -
力扣214-最短回文串【kmp】
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。示例 1:输入: “aacecaaa”输出: “aaacecaaa”示例 2:输入: “abcd”输出: “dcbabcd”代码实现:class Solution { public static String shortestPalindrome(String s) { StringBuilder r = new StringBuilder(s).reverse();原创 2020-08-29 22:44:37 · 369 阅读 · 0 评论 -
力扣-35搜索插入位置【二分法】
35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0代码实现class Solution { public int searchInsert(int原创 2020-08-24 16:21:51 · 178 阅读 · 0 评论 -
来了 基础练习 01字串
用位运算去找它的二进制位,然后用可变的字符串类型StringBuffer试题 基础练习 01字串资源限制时间限制:1.0s 内存限制:256.0MB问题描述对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出3...原创 2020-04-02 23:13:03 · 163 阅读 · 0 评论 -
来了 分糖果
分糖果import java.util.Scanner;/** * 题目描述 问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一...原创 2020-04-21 23:17:26 · 162 阅读 · 0 评论 -
字母图形
资源限制时间限制:1.0s 内存限制:256.0MB问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形...原创 2020-03-19 23:15:34 · 104 阅读 · 0 评论 -
Huffman树-Java
Huffman树资源限制时间限制:1.0s 内存限制:512.0MB问题描述 Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下: 1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,然后将它们的和加入到{pi}中。...原创 2020-03-14 22:30:34 · 164 阅读 · 0 评论 -
特殊回文数
特殊回文数资源限制时间限制:1.0s 内存限制:512.0MB问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式 输入一行,包含一个正整数n。输出格式 按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出89999898998...原创 2020-03-11 23:20:54 · 126 阅读 · 0 评论 -
十六进制转八进制(进制转换关键在范围)
十六进制转八进制问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。【注意】 输入的十六进制数不会有前导0,比如012A。...原创 2020-03-10 19:58:12 · 587 阅读 · 0 评论 -
汉诺塔-笔记
#汉诺塔汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。根据原问题从足够小的1、2、3个盘子问题,在脑海里展开想象它的动态演示。src A塔 midB塔 d...原创 2019-08-09 17:15:13 · 472 阅读 · 0 评论 -
n皇后问题-笔记
即在一个n×n的棋盘上摆放n个皇后,使其中任意两个皇后都在不同行同列,也不在一条斜线上。请求出它所有的摆法。(一行一种摆法)这里我们用的是回溯法回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。优点:程序结构明确,可读性强,易于理解,而且通过减少不必要的重复提高运行效率。缺点:但是,对于可以得出明显的递推公式迭代求解的问题,还是不要用回溯法,因为它花费的时间比较...原创 2019-08-09 17:48:39 · 382 阅读 · 1 评论 -
波动数列-笔记 Java【动态规划、整数分拆】
在参考了各位前辈的答案后,我终于理解了。现在写在这里,希望有帮到大家,看完的难兄难弟们,记得长按点赞三连!!!(咳咳,不好意思走错片场了)参考的是这位大佬:https://blog.youkuaiyun.com/nxjhi/article/details/69389074问题描述 观察这个数列: 1 3 0 2 -1 1 -2 …这个数列中后一项总是比前一项增加2或者减少3。栋栋对这种数列很好...原创 2020-02-18 00:20:23 · 641 阅读 · 0 评论 -
“最大子列和问题的四种解法”【详解分冶法】
#最大子列和问题 (在N个数的序列中,求其连续的子序列最大和的问题)“暴力枚举、简化枚举、 分冶法、 在线处理”##算法1 暴力枚举直接枚举所有情况直接比较:#include<iostream>#include "stdio.h"#include <math.h>using namespace std;//算法 1 时间复杂度是O(n^3)int MaxS...原创 2019-08-01 11:50:54 · 649 阅读 · 0 评论 -
迷宫【BFS、队列】
标题:迷宫【问题描述】下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可以通行的地方。010000000100001001110000迷宫的入口为左上角,出口为右下角,在迷宫中,只能从一个位置走到这个它的上、下、左、右四个方向之一。对于上面的迷宫,从入口开始,可以按DRRURRDDDR 的顺序通过迷宫,一共 10 步。其中 D、U、L、R 分别表示向下、...原创 2020-03-03 22:25:29 · 441 阅读 · 0 评论