置顶文章

13k12 分钟

1569. 将子数组重新排序得到同一个二叉搜索树的方案数 难度困难 给你一个数组 nums 表示 1 到 n 的一个排列。我们按照元素在 nums 中的顺序依次插入一个初始为空的二叉搜索树(BST)。请你统计将 nums 重新排序后,统计满足如下条件的方案数:重排后得到的二叉搜索树与 nums 原本数字顺序得到的二叉搜索树相同。 比方说,给你 nums = [2,1,3] ,我们得到一棵 2 为根,1 为左孩子,3 为右孩子的树。数组 [2,3,1] 也能得到相同的 BST,但 [3,2,1] 会得到一棵不同的 BST 。 请你返回重排 nums
4.3k4 分钟

1627. 带阈值的图连通性 难度困难 有 n 座城市,编号从 1 到 n 。编号为 x 和 y 的两座城市直接连通的前提是: x 和 y 的公因数中,至少有一个 严格大于 某个阈值 threshold 。更正式地说,如果存在整数 z ,且满足以下所有条件,则编号 x 和 y 的城市之间有一条道路: x % z == 0 y % z == 0 z > threshold 给你两个整数 n 和 threshold ,以及一个待查询数组,请你判断每个查询 queries[i] = [a
4.1k4 分钟

# 核心原则 及时移除无用数据,保证栈 / 队列的有序性 # 上一个更大元素 采用栈保存递减的元素,即递减栈(弹出的都是小于当前元素的,只保留大于) 若栈顶元素 ≤\le≤ 当前元素 nums[i]nums[i]nums[i],则弹出栈顶元素直至「栈为空」(左边没有比 nums[i]nums[i]nums[i] 大的元素)或者「栈顶元素 >>> 当前元素 nums[i]nums[i]nums[i]」 此时栈顶的元素就是 nums[i]nums[i]nums[i] 上一个更大的元素 例如:nums:[3,1,2,5,3,4]nums:[3,1,2,5,3,4]n
8k7 分钟

1015. 可被 K 整除的最小整数 难度中等 给定正整数 k ,你需要找出可以被 k 整除的、仅包含数字 **1** 的最 小 正整数 n 的长度。 返回 n 的长度。如果不存在这样的 n ,就返回 - 1。 注意: n 不符合 64 位带符号整数。 示例 1: 输入:k = 1 输出:1 解释:最小的答案是 n = 1,其长度为 1。 示例 2: 输入:k = 2 输出:-1 解释:不存在可被 2 整除的正整数 n 。 示例 3: 输入:k = 3 输出:3 解释:最小的答案是 n = 111,其长度为
10k10 分钟

# 递归遍历 确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证写出正确的递归算法! 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。 确定终止条件: 写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。 # 前序遍历 以下以
3.2k3 分钟

1012. 至少有 1 位重复的数字 难度困难 给定正整数 n ,返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 示例 1: 输入:n = 20 输出:1 解释:具有至少 1 位重复数字的正数(<= 20)只有 11 。 示例 2: 输入:n = 100 输出:10 解释:具有至少 1 位重复数字的正数(<= 100)有 11,22,33,44,55,66,77,88,99 和 100 。 示例 3: 输入:n = 1000 输出:262 提示: 1 <= n <&
3.9k4 分钟

2654. 使数组所有元素变成 1 的最少操作次数 难度中等 给你一个下标从 0 开始的 正 整数数组 nums 。你可以对数组执行以下操作 任意 次: 选择一个满足 0 <= i < n - 1 的下标 i ,将 nums[i] 或者 nums[i+1] 两者之一替换成它们的最大公约数。 请你返回使数组 nums 中所有元素都等于 1 的 最少 操作次数。如果无法让数组全部变成 1 ,请你返回 -1 。 两个正整数的最大公约数指的是能整除这两个数的最大正整数。 示例 1: 输入:nums = [2,6,3,4] 输出:
8.2k7 分钟

2646. 最小化旅行的价格总和 难度困难 现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n - 1 的二维整数数组 edges ,其中 edges[i] = [ai, bi] 表示树中节点 ai 和 bi 之间存在一条边。 每个节点都关联一个价格。给你一个整数数组 price ,其中 price[i] 是第 i 个节点的价格。 给定路径的 价格总和 是该路径上所有节点的价格之和。 另给你一个二维整数数组 trips ,其中 trips[i] = [start
2.8k3 分钟

337. 打家劫舍 III 难度中等 1479 小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。 除了 root 之外,每栋房子有且只有一个 “父 “房子与之相连。一番侦察之后,聪明的小偷意识到 “这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。 给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。 示例 1: 输入: root = [3,2,3,null,3,null,1] 输出: 7 解释:小偷一晚能够盗取的最高金额 3 + 3 + 1 &#x
2.6k2 分钟

# 前言 为什么会用到线段树?可以在 log(n) 的情况下查询和更新区间。 若用现在有一个这样的问题:有一个数组 a ,下标从 0 到 n-1 ,现在给你 w 次修改, q 次查询,修改的话是修改数组中某一个元素的值;查询的话是查询数组中任意一个区间的和, w + q < 500000 。 这个问题很常见,首先分析下朴素做法的时间复杂度,修改是 O(1) 的时间复杂度,而查询的话是 O(n) 的复杂度,总体时间复杂度为 O(qn) ;可能你会想到前缀和来优化这个查询,我们也来分析下,查询的话是 O(1) 的复杂度,而修改的时候修改一个点,那么在之后的所
2.7k2 分钟

# 前言 参考 树状数组(BIT)—— 一篇就够了 - Last_Whisper - 博客园 (cnblogs.com) 参考 树状数组简单易懂的详解_FlushHip 的博客 为什么会用到树状数组?可以在 log(n) 的情况下查询和更新区间。 若用现在有一个这样的问题:有一个数组 a ,下标从 0 到 n-1 ,现在给你 w 次修改, q 次查询,修改的话是修改数组中某一个元素的值;查询的话是查询数组中任意一个区间的和, w + q < 500000 。 这个问题很常见,首先分析下朴素做法的时间复杂度,修改是 O(1) 的时间复杂度,而查询的话是 O(n)
6.6k6 分钟

684. 冗余连接 难度中等 树可以看成是一个连通且 无环 的 无向 图。 给定往一棵 n 个节点 (节点值 1~n ) 的树中添加一条边后的图。添加的边的两个顶点包含在 1 到 n 中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为 n 的二维数组 edges , edges[i] = [ai, bi] 表示图中在 ai 和 bi 之间存在一条边。 请找出一条可以删去的边,删除后可使得剩余部分是一个有着 n 个节点的树。如果有多个答案,则返回数组 edges 中最后出现的边。 示例 1: 输入: edges = [[
9k8 分钟

Dijkstra 算法 参考 https://zhuanlan.zhihu.com/p/129373740 Djstra 算法:每次从 「未求出最短路径的点」中 取出 距离起点 最小路径的点,以这个点为桥梁 刷新「未求出最短路径的点」的距离 # Dijkstra 算法图解方式一 # 图解(外部剪枝) 如下所示,用优先队列演示图 此处剪枝是在 for 外部剪枝 即:压入队列之后然后弹出队列剪枝 只有当前路径 dis > minDis 时候才剪枝,若 dis 

精选分类

文章列表

192k2:54

# 深度学习概念 # 什么是神经网络 右边的网路实现了左边这个函数的功能 神经元就是输入面积,完成线性运算,取不小于 0 的值,最后得到输出预测价格 x:输入。y:输出(预测的价格) 只需输入 x,所有的中间过程 它都会自己完成,预测 y 中间三个神经元,在一个神经网络中被叫做 “隐藏单元”,输入都同时来自四个特征 神经元自己定义名称,只给四个输入特征随便怎么计算。 神经网络非常善于计算从 x 到 y 的精准映射函数 # 用神经网络进行监督学习 1,2 经常使用的是标准神经网络 3 经常使用的是卷积神经网络(CNN) 4,5,对于序列数据,经常使用 RNN(循环神经网
1.8k2 分钟

# 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 灵神题解 参考 https://leetcode.cn&
1.8k2 分钟

# 70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。 1. 1 阶 + 1 阶 + 1 阶 2. 1 阶 + 2 阶 3. 2 阶 + 1 阶 灵神题解 参考 https://leetcode.cn&
45k40 分钟

# 字符型数据 类型 字节数 取值范围 signed char 1 -128 ~ 127 unsigned char 1 0 ~ 255 注意: c99 把字符型数据作为整型类型的一种。 在使用有符号字符型变量时,允许储存的值为负数,但是字符的代码不可能是负值,所以在存储字符时只用到了 0-127 这一部分。 #include <stdio.h> #include <iostream> int main() { signed char sc; unsigned char uc; //在
76k1:09

# 线性表 # 顺序表 # 定义 // 线性表的最大长度#define MAXSIZE 10typedef struct Stu { int score;} DataType;typedef struct SqList { int length; DataType data[MAXSIZE];} SqList;# 初始化 // 初始化void init(SqList* sqList) { sqList->length = 0;}# 插入 /&#x
38k34 分钟

# day 26 1. despair [dɪ'speə(r)] n.  v. 绝望 2. desperate ['despərət]  adj. 绝望的;极其严重的;不顾一切的 3. destination [ˌdestɪ'neɪʃn]  n. 目的地,终点 4. destiny [ˌdestəni]  n. 命运,命中注定的事 5. destruction [dɪ'strʌkʃn]  n. 破坏,毁灭 6. destructive [dɪ'st
5.3k5 分钟

1998. 数组的最大公因数排序 难度困难 给你一个整数数组 nums ,你可以在 nums 上执行下述操作 任意次 : 如果 gcd(nums[i], nums[j]) > 1 ,交换 nums[i] 和 nums[j] 的位置。其中 gcd(nums[i], nums[j]) 是 nums[i] 和 nums[j] 的最大公因数。 如果能使用上述交换方式将 nums 按 非递减顺序 排列,返回 true ;否则,返回 false 。 示例 1: 输入:nums = [7,21,3] 输出:true 解释:可以执行下述操作完成
4k4 分钟

321. 拼接最大数 难度困难 给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。 求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。 说明: 请尽可能地优化你算法的时间和空间复杂度。 示例 1: 输入: nums1 = [3, 4, 6, 5] nums2 = [9, 1, 2, 5, 8, 3] k = 5 输出: [9, 8, 6
2.4k2 分钟

402. 移掉 K 位数字 难度中等 给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 示例 1 : 输入:num = "1432219", k = 3 输出:"1219" 解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。 示例 2 : 输入:num = "10200", k = 1 输出:"200" 解释:移掉首位的 1 剩下的数字为