leedcode专题

【LeedCode】二分查找算法(一)

二分查找算法的时间复杂度是O(logN) ,更优于传统的遍历数组算法值得我们学习。 注意二分查找一般使用的前提是:待操作的数组的元素有某种规律也就是要有二阶性,二阶性就是在数组中选取一点根据该数组元素某种规律可以把数组分为两部分,可以舍弃一部分然后在剩下的部分找出结果。 简单二分查找算法 解法一:遍历数组,时间复杂度O(n)。 解法二:二分查找,时间复杂度O(logN)。

Day7: LeedCode 454. 四数相加 II 383.赎金信 15.三数之和 18.四数之和

详细讲解移步: Day7: LeedCode 454. 四数相加 II 383.赎金信 15.三数之和 18.四数之和-CSDN博客 454. 四数相加 II 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k, l < nnums1[i] + nums2[j

Day3: LeedCode 203. 移除链表元素 707. 设计链表 206. 反转链表

详细讲解移步:Day3: LeedCode 203. 移除链表元素 707. 设计链表 206. 反转链表-CSDN博客 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6输出:

Leedcode题目:移除链表元素

题目:  这个题目就是要我们将我们的链表中的值是val的节点删除。 我们题目提供的接口是 传入了指向一个链表的第一个节点的指针,和我们要删除的元素的值val,不只要删除第一个, 思路  我们这里可以创建一个新的链表,定义一个pcur变量来帮我们遍历链表,当我们的值等于val的时候就让他直接跳到下一个,不是的时候就将我们的newTail的指向改变一下,使他指向我们的pcur,在这之

LeedCode·16. 3Sum Closest

题目: Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input w

Day 63:单调栈 LeedCode 84.柱状图中最大的矩形

84. 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights = [2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为 10 示例 2: 输入: heights = [2,4]输出: 4 提

Day51:动态规划 LeedCode 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

300. 最长递增子序列 中等 相关标签 相关企业 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的 子序列 。  示例 1: 输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长

轮转数组(Leedcode)的题目

题目:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums = [1,2,3,4,5,6,7], k = 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4] 示例 2: 输入:

Day43:LeedCode 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

1049. 最后一块石头的重量 II 有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头

Day42:动态规划 LeedCode 01背包 416. 分割等和子集

01背包 1.确定dp数组以及下标的含义 dp[i][j]的含义:从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 那么可以有两个方向推出来dp[i][j] 2.确定递推公式 不放物品i:由dp[i - 1][j]推出,即背包容量为j,里面不放物品i的最大价值,此时dp[i][j]就是dp[i - 1][j]。(其实就是当物品i的重量大于背包j的重量时,物品i无

Day 39:动态规划 LeedCode 62.不同路径 63. 不同路径 II

62. 不同路径 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? 示例 1: 输入:m = 3, n = 7输出:28 示例 2: 输入:m = 3, n = 2输出:3解释:从左上角开

Day37:LeedCode 738.单调递增的数字 968.监控二叉树 蓝桥杯 翻转

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。 给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。 示例 1: 输入: n = 10输出: 9 思路: 假设这个数是98,n[i]>n[i+1],让n[i]--,n[i+1]=9,即98的单调递增数就是89 如果从前往后遍历,n[i

Day30 回溯 LeedCode 332.重新安排行程 51. N皇后 37. 解数独 蓝桥杯 与或异或

332. 重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。 例如,行程 ["JFK", "LGA"] 与 ["JFK",

leedcode第一题心得--快速排序(超详解)

这里说明,第一题本身不需要这么多代码,以下是为了锻炼算法 以下是快速排序的方法:具体解释和疑惑点可以参考注释,建议看之前先去看看B站的算法解释: 快速排序算法_哔哩哔哩_bilibili class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {//先放数字,再排序for (int i = m, j

Day18:LeedCode 513.找树左下角的值 112. 路径总和 106.从中序与后序遍历序列构造二叉树

513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1:   输入: root = [2,1,3]输出: 1  思路:出该二叉树的 最底层 最左边 节点的值=找出深度最大的第一个结点(左结点先遍历) 方法一:递归法 如何找出深度最大的结点:回溯法,设置两个全局遍历maxlen,resu

Leedcode刷题——2 字符串

注:以下代码均为c++ 1. 反转字符串 void reverseString(vector<char>& s) {int n = s.size();int i, j;for(i = 0, j = n - 1; i < j; i++, j--){swap(s[i], s[j]);}} 2. 整数反转 int reverse(int x) {int rev = 0;while

Day16:LeedCode 104.二叉树的最大深度 111.二叉树最小深度 222.完全二叉树的结点个数

104. 二叉树的最大深度 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 思路:根结点最大深度=max(左子树最大深度,右子树最大深度)+1 终止条件,结点为null,该结点最大深度为0 class Solution {public int maxDepth(TreeNode root) {if(root==nu

Leedcode刷题——5 DFS+回溯

注:以下代码均为c++ 1. 电话号码的字母组合 思路: 例如:”23“ //1. 我自己写的vector<string> letterCombinations(string digits) {if(digits == "")return {};vector<string> state = {""};string s;vector<string> strs = {"", "",

Leedcode-剑指 Offer 25. 合并两个排序的链表----C++实现

目的 旨在记录在Leedcode网上刷题的过程,记录心得。 题目 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 限制: 0 <= 链表长度 <= 1000 思路: 思路1:将2个链表的数据取出来,排好序,重新创建新的链表,返回 这个思路与此前的文章Leedcod

Leedcode编程题-剑指 Offer 07 - 重建二叉树----C++实现

目的: 旨在记录在Leedcode网上刷题的过程,记录心得。 题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树:     3    / \   9  20     /

Leedcode编程题-剑指 Offer 32 - I. 从上到下打印二叉树----C++实现

目的: 旨在记录在Leedcode网上刷题的过程,记录心得。 题目: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 例如: 给定二叉树: [3,9,20,null,null,15,7],     3    / \   9  20     /  \    15   7 返回: [3,9,20,15,7] 提示: 节点总数 <= 1000 思路: 二

刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现

刷题日记Day2 977 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II 977 有序数组的平方 链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

Amber-Leedcode-Java - 代码随想录打卡第38 - 39天-动态规划汇总

509. 斐波那契数 较为简单 746. 使用最小花费爬楼梯 62. 不同路径 一开始写的时候被吓到了,但是发现听完一半之后再写还是比较容易的 对于我而言主要是找到逻辑, class Solution {public int uniquePaths(int m, int n) {if (m <= 1 || n <=1){return 1;}int[][] result

JavaLeedCode新手村学习1

JavaLeedCode新手村学习之第一天 day01 一.1.两数之和 题目: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 给定的代码: class Solution {public int[] twoSum(int[] nums, int target) {}} 示例 1: 输

Leedcode 456. 132模式 Python实现

下面分析转自于:https://blog.csdn.net/nunuwode/article/details/81990426 2.挺巧妙的方法,从后往前遍历,将数字从大到小依次压栈,当遇到一个数比栈顶大的时候,依次弹栈,将弹出来的数赋给一个变量third,然后直到遇到栈顶的数比当前这个数大,就将这个数压栈。这样就保证了在遍历的过程中,栈里保存着最大的数,third保存着最大的数下的尽量大的数。

leedcode刷题day2

题目: 根据这道题我的思路是用python首先将第一个值赋给a,然后将下一个值赋值给b在这里写一个循环计算下一个值是否等于a,不等于就进入数组当等于a的时候输出数组长度,然后比较数组长度输出最长长度对应的元素不过显然这很慢。 然后看了芦总的想法感觉还行不过我不知道用python怎么实现,因为他用的c++,然后是建立一个vector容器存放目前的最长子串,从第一个字符开始判断,如果字符不在子串中,