
LeetCode笔记
B站:阿里武
中山大学 数据科学与计算机学院 专业硕士
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode】215. 数组中的第K个最大元素
快排class Solution {public: void back (vector<int>& nums, int left, int right, int k) { if (left >= right) { return; } int i = left, j = right, base = nums[left], tmp = 0; while (i <原创 2021-09-14 12:55:55 · 248 阅读 · 0 评论 -
【leetcode】86. 分隔链表 详解
86. 分隔链表解题思路暴力解法扫描链表 把小于x的队列依次加入到 arr1 ,大于等于的 加入到 arr2然后 在dummy 结点 依次加入arr1 arr2复杂度分析时间复杂度 O(N)空间复杂度O(N)代码vector <int> arr1, arr2;ListNode * dummy = new ListNode(-1) ;ListNode *end = dummy;while (head != nullptr) { if (head-&g原创 2021-01-23 09:49:26 · 329 阅读 · 0 评论 -
【leetcode】2. 两数相加 详解
2. 两数相加解题思路设置哑结点,插入适当结点左边到右边都是个位数开始, 所以进行模拟加法即可得到 位数值 注意:当指针指向空时 我们认为 此时值为0 便于处理进行加法模拟特殊情况分析 当两边结点扫描完 需要加入新结点时例子250 + 750, 需要多加1位 最高位复杂度分析空间复杂度 O(1)时间复杂度 O(N)代码/** * Definition for singly-linked list. * struct ListNode { * int val;原创 2021-01-22 23:09:21 · 446 阅读 · 0 评论 -
【leetcode】92. 反转链表 II
反转链表 II解题思路设置哑结点前面0 ~ m-1个进行 尾插法中间m-1 ~ n 进行 倒叙尾插法最终连接第n + 1 个复杂度分析空间复杂度 O(1)时间复杂度 O(N)代码/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} *原创 2021-01-22 22:29:35 · 247 阅读 · 1 评论 -
【leetcode】24. 两两交换链表中的节点
前言有些同学也许会被链表指针给搞的昏头转向,在纸上画出很久都没搞清楚。下面将介绍一种较为通用的方法:“新建链表法”,可以解决指针乱指等晕头转向的操作。只要掌握 删除节点和尾插法建表 ,大部分链表题目都可以转换为重新建表问题“新建链表法”:即使用尾插法构建“新链表”,此处不是从新malloc链表节点,而是改变原节点的指针指向。其步骤如下:根据问题需求判断头节点是否会被改变,若有则在原链表上加上哨兵节点作为「虚拟头节点」。遍历原链表节点,把符合题意的节点“拆下来”,然后追加到“新链表”上。“新链表”原创 2021-01-20 21:03:36 · 220 阅读 · 0 评论 -
【leetcode】80. 删除排序数组中的重复项 II
题解1思路 # 定义两个指针 p q 一个记录当前重复次数的变量 maxLen = 1 表示还可以重复几次 # 对数组进行遍历 # 如果nums[p] == nums[q] : # if maxLen == 0: # continue # else: # maxLen– # 对p进行修改 # 否则 # 重置maxLen 为 1 #原创 2021-01-19 20:48:49 · 232 阅读 · 0 评论 -
【leetcode】26 删除排序数组中的重复项
解法1:时间复杂度 O(n ^2)空间复杂度 O(1)class Solution {public: int removeDuplicates(vector<int>& nums) { // # 定义一个特殊值和 长度值 // # 一步步遍历, 如果找到特殊值 则跳过 // # 否则 将新值 插入到 长度值位置 长度值+1 // if (nums.size() == 0) {原创 2021-01-19 19:32:25 · 209 阅读 · 0 评论 -
【PAT】 1020 发邮件(错排问题)详解
题目描述NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。输入描述:输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述:对应每一组数据,输出一个正整数,表示无人收到自己邮件的...原创 2020-05-02 22:27:03 · 424 阅读 · 0 评论 -
【PAT】客似云来详解
题目描述NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。输入描述:测试数据...原创 2020-04-18 19:34:00 · 545 阅读 · 0 评论 -
【PAT】养兔子详解
PAT 养兔子题目描述一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。输入描述:测试数据包括多组,每组一行,为整数n(1≤n≤90)。输出描述:对应输出第n天有几只兔子(假设没有兔子死亡现象)。输入例子:12输出例子:12解题思路1. 模拟法模拟出兔子的增长过程, 兔子分为...原创 2020-03-30 17:01:03 · 688 阅读 · 0 评论 -
四种方法求Capacitated Facility Location Problem问题
问题详情1. 贪心算法1.1 算法框架此题可以利用贪心算法来求解, 可以假设只关注顾客的cost, 当仓库满了就在下一个仓库里具体解决方案:将每个顾客到工厂的cost 由小到大进行排序从第一个用户开始, 优先把此用户安排在cost小的工厂里, 如果此工厂容量已满, 则进入下一个最小cost工厂里得到结果1.2关键代码和注释 customer_assign = []...原创 2018-12-22 03:07:44 · 1990 阅读 · 0 评论 -
LeetCode.516 最长回文子序列 详解
题目详情给定一个字符串s,找到其中最长的回文子序列。可以假设s的最大长度为1000。示例 1:输入:"bbbab"输出:4一个可能的最长回文子序列为 "bbbb"。示例 2:输入:"cbbd"输出:2一个可能的最长回文子序列为 "bb"。解法解法1: 动态规划此题很容易想到动态规划,像这种子字符串的题, 首先就能用二维数组dp[i][j]表示下标i~j的...原创 2018-12-10 23:36:02 · 1200 阅读 · 0 评论 -
LeetCode 873. 最长的斐波那契子序列的长度 题目详解
题目详情如果序列 X_1, X_2, ..., X_n 满足下列条件,就说它是 斐波那契式 的: n >= 3 对于所有 i + 2 <= n,都有 X_i + X_{i+1} = X_{i+2}给定一个严格递增的正整数数组形成序列,找到 A 中最长的斐波那契式的子序列的长度。如果一个不存在,返回 &nb...原创 2018-12-17 00:42:20 · 931 阅读 · 0 评论 -
LeetCode 931. 下降路径最小和 详解
题目详情给定一个方形整数数组 A,我们想要得到通过 A 的下降路径的最小和。下降路径可以从第一行中的任何元素开始,并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列。 示例:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:12解释:可能的下降路径有: [1,4,7], [1,4,8], [1,5,7], [1,5,8],...原创 2018-12-02 22:58:39 · 1131 阅读 · 0 评论 -
LeetCode 392. Is Subsequence 详解
题目详情给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例&nbs...原创 2018-11-17 23:18:35 · 1093 阅读 · 0 评论 -
花式求解 LeetCode 279题-Perfect Squares
原文地址https://www.jianshu.com/p/2925f4d7511b 迫于就业的压力,不得不先放下 iOS 开发的学习,开始走上漫漫刷题路。今天我想聊聊 LeetCode 上的第279题-Perfect Squares,花了挺长时间的,试了很多方法,作为一个算法新手,个人感觉这题很好,对我的水平提升很有帮助。我在这里和大家分享一下我的想法。下面是题目:...转载 2018-11-17 22:30:38 · 1150 阅读 · 0 评论 -
LeetCode 115.不同的子序列 详解
题目详情给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)示例 1:输入: S = "rabbbit", T = "rabbit"输出: 3解释:如下图所示, 有 3 种可以从 ...原创 2018-11-11 15:42:28 · 2678 阅读 · 0 评论 -
动态规划公共子问题模式总结
动态规划公共子问题模式在解决动态规划问题时候, 关键的一点就是找到子问题, 在动态规划中有一些常见的子问题模式,需要熟悉。下面就是一些常见子问题模式总结1. 输入为x1,x2,···, xn输出为x1,x2, ···, xi在这种情况下,子问题是从x1~xi这一部分。子问题的个数一般为n, 所以用一个dp[n]的数组就能把子问题的解保存例子:LeetCode746 Min Cost ...原创 2018-11-05 13:04:00 · 1847 阅读 · 0 评论 -
LeetCode 647. Palindromic Substrings的三种解法
转载地址https://www.cnblogs.com/AlvinZH/p/8527668.html#_label5题目详情给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "...转载 2018-11-02 19:22:45 · 2041 阅读 · 0 评论 -
LeetCode343 整数拆分详解
题目详情给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n ...原创 2018-11-03 13:39:43 · 2063 阅读 · 0 评论 -
LeetCode406 queue-reconstruction-by-height详解
题目详情假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,...原创 2018-10-27 14:01:47 · 1423 阅读 · 0 评论 -
求第k小的数 O(n)复杂度
博客转载地址:https://blog.youkuaiyun.com/flyawayl/article/details/53538369思路:利用快速排序的思想,把数组递归划分成两部分。设划分为x,数组左边是小于等于x,右边大于x。 关键在于寻找一个最优的划分,经过 Blum 、 Floyd 、 Pratt 、 Rivest 、 Tarjan五位大牛的研究总结,提出了BFPRT 算法(也就是中位数...转载 2018-09-12 00:12:38 · 2262 阅读 · 0 评论 -
动态规划算法详解 Dynamic Programming
博客出处: https://blog.youkuaiyun.com/u013309870/article/details/75193592 前言最近在牛客网上做了几套公司的真题,发现有关...转载 2018-09-09 22:37:08 · 1330 阅读 · 0 评论 -
LeetCode746 Min Cost Climbing Stairs(爬上楼梯的最小损失)
题目On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed).Once you pay the cost, you can either climb one or two steps. You need to find minimum cost to reach the to...原创 2018-09-10 00:36:34 · 1235 阅读 · 0 评论 -
338. Counting Bits题目详解
题目详情Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1’s in their binary representation and return them as an array.Example 1:Input...原创 2018-09-12 13:02:46 · 1205 阅读 · 0 评论 -
LeetCode198 House Robber(打家劫舍)
题目You are a professional robber planning to rob houses along a street. Each house has a certain amount of money stashed, the only constraint stopping you from robbing each of them is that adjacent h...原创 2018-09-10 11:40:08 · 1237 阅读 · 0 评论 -
算法设计与分析—— 动态规划法
五大经常使用算法 之 动态规划法 一、基本概念&nbsp;&nbsp;&nbsp; 动态规划过程是:每次决策依赖于当前状态。又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这样的多阶段最优化决策解决这个问题的过程就称为动态规划。&nbsp;&nbsp;&nbsp;动态规划是运筹学中用于...转载 2018-09-10 11:48:11 · 2510 阅读 · 0 评论 -
LeetCode 413 Arithmetic Slices详解
这个开始自己做的动态规划复杂度达到了O(n), 是用的是2维的矩阵来存前面的数据,复杂度太高了, 虽然好理解,但是没效率,后面看这个博客发现没有动态规划做了这个题 也是比较厉害。转载地址:https://blog.youkuaiyun.com/camellhf/article/details/52824234#commentBox LeetCode 413. Arithme...原创 2018-09-17 20:02:02 · 1161 阅读 · 0 评论 -
LeetCode 64最小路径和
题目给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。解释此题运用的是动态规划, 而且和很多题目非常相似,...原创 2018-09-17 21:48:59 · 1427 阅读 · 0 评论 -
leetcode 877. Stone Game 详解 -——动态规划
题目链接https://leetcode.com/problems/stone-game/discuss/ https://leetcode-cn.com/contest/weekly-contest-95/problems/stone-game/877. 石子游戏亚历克斯和李用几堆石子在做游戏。偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] 。游戏以谁手中的石子最多...转载 2018-09-13 22:45:53 · 2414 阅读 · 0 评论 -
Leetcode 647 回文子串
题目描述:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:原创 2018-10-03 11:42:05 · 1433 阅读 · 0 评论 -
LeetCode 120. Triangle (三角形最小路径和)详解
题目详情给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为&nbsp;11(即,2&nbsp;+&nbsp;3&nbsp;+&nbsp;5&nbsp;+&nbsp;1&nbsp;= 11)原创 2018-09-21 19:18:58 · 4271 阅读 · 0 评论 -
LeetCode 96. 不同的二叉搜索树
转载地址:https://blog.youkuaiyun.com/u012501459/article/details/46622501题目 Given&amp;nbsp;n, how many structurally unique&amp;nbsp;BST's&amp;nbsp;(binary search trees) that store values...转载 2018-09-22 13:54:18 · 1636 阅读 · 0 评论 -
LeetCode 309 Best Time to Buy and Sell Stock with Cooldown 解决方案
题目描述给定一个整数数组,其中第&nbsp;i&nbsp;个元素代表了第&nbsp;i&nbsp;天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出...原创 2018-10-14 23:40:14 · 1169 阅读 · 0 评论 -
LeetCode 646 最长数对链详解
题目描述给出 n 个数对。 在每一个数对中,第一个数字总是比第二个数字小。现在,我们定义一种跟随关系,当且仅当 b < c 时,数对(c, d) 才可以跟在 (a, b) 后面。我们用这种形式来构造一个数对链。给定一个对数集合,找出能够形成的最长数对链的长度。你不需要用到所有的数对,你可以以任何顺序选择其中...原创 2018-10-08 22:45:06 · 1546 阅读 · 0 评论 -
LeetCode 861翻转矩阵后得分详细解法
1. 题目内容有一个二维矩阵&nbsp;A 其中每个元素的值为&nbsp;0&nbsp;或&nbsp;1&nbsp;。移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。返回尽可能高的分数。&nbsp;示例:输入:[[0,0,1,1],原创 2018-10-20 16:05:10 · 1473 阅读 · 0 评论 -
LeetCode 763划分字母区间 详解
题目详情字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例 1:输入: S = "ababcbacadefegdehijhklij"输出: [9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。原创 2018-10-20 19:26:08 · 1356 阅读 · 0 评论 -
LeetCode 122 best-time-to-buy-and-sell-stock-ii 详解
题目描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖...原创 2018-10-27 10:59:56 · 1249 阅读 · 0 评论 -
LeetCode-----翻转二叉树
题目——翻转二叉树翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebre...原创 2018-08-29 10:00:31 · 1790 阅读 · 2 评论