Leetcode/剑指offer/算法/数据结构
nudt_qxx
这个作者很懒,什么都没留下…
展开
-
牛客笔试题之求城市群数量 DFS/BFS实现连通分量的统计
BFS/DFS/连通域原创 2024-03-13 10:23:23 · 463 阅读 · 2 评论 -
C++递归和非递归实现判断一个数是否为质数
在C++中,判断一个数是否为质数,可以编写一个函数来实现。这个函数首先检查输入的数是否小于等于1,如果是,则直接返回false。然后检查数是否为2,如果是,则返回。这个函数首先检查输入的数是否小于等于2,如果是,则直接返回。的所有奇数,如果num能被这些数中的任何一个整除,则返回。接着检查i的平方是否大于输入的数,如果是,则返回。函数来判断这个数是否为质数,并输出相应的结果。函数来判断这个数是否为质数,并输出相应的结果。然后检查数是否能被i整除,如果是,则返回。接着检查数是否为偶数,如果是,则返回。原创 2024-03-19 11:22:38 · 345 阅读 · 0 评论 -
leetcode 240. 搜索二维矩阵 II
由于每一列的元素都是升序排列的,那么在当前的搜索矩阵中,所有位于第 y 列的元素都是严格大于 target 的,因此我们可以将它们全部忽略,即将 y 减少 1;,由于每一行的元素都是升序排列的,那么在当前的搜索矩阵中,所有位于第 x 行的元素都是严格小于 target 的,因此我们可以将它们全部忽略,即将 x 增加 1。编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target :如果搜索到返回true,否则返回false。每列的元素从上到下升序排列。原创 2024-03-07 19:19:03 · 340 阅读 · 0 评论 -
求每个cluster中box的个数
有一堆box,若干个box有交集就是一个簇,求每个cluster中box的个数。注意:可以自定义box的结构体, 无需考虑旋转角度。请用C+实现上述代码。原创 2024-03-07 11:12:28 · 216 阅读 · 0 评论 -
leetcode.15三数之和
然后,我们遍历数组,对于每个元素,我们使用两个指针分别指向当前元素的下一个元素和数组的末尾,然后向中间移动两个指针,直到两个指针相遇。在移动指针的过程中,我们需要判断三个指针指向的元素之和是否等于0,如果等于0,我们将这三个元素加入结果集中;然后,我们遍历数组,对于每个元素,我们使用两个指针分别指向当前元素的下一个元素和数组的末尾,然后向中间移动两个指针,直到两个指针相遇。同样地,在移动指针的过程中,我们也需要判断当前指针指向的元素是否与前一个元素相同,如果相同,我们也需要跳过当前元素,以避免重复计算。原创 2024-03-05 20:10:29 · 273 阅读 · 0 评论 -
leetcode 经典题目42.接雨水
如果当前元素的高度小于栈顶元素的高度,我们将当前元素的索引入栈;如果当前元素的高度大于或等于栈顶元素的高度,我们将栈顶元素出栈,并计算出栈元素对应的雨水量。首先,我们需要遍历数组,对于每个元素,我们将其高度与栈顶元素的高度进行比较。如果当前元素的高度小于栈顶元素的高度,我们将当前元素的索引入栈;如果当前元素的高度大于或等于栈顶元素的高度,我们将栈顶元素出栈,并计算出栈元素对应的雨水量。需要注意的是,在计算雨水量时,我们需要考虑当前元素与栈顶元素之间的距离,以及当前元素和栈顶元素之间的最小高度。原创 2024-03-05 20:00:50 · 681 阅读 · 0 评论 -
leetcode 11.盛最多水的容器
首先,我们需要两个指针,分别指向数组的左右两端。然后,我们比较两个指针指向的值,将较小的值对应的指针向中间移动,同时计算当前两个指针之间的面积。最后,我们比较所有计算出的面积,返回最大的面积即可。来确定当前两个指针之间的最大高度,这是因为如果两个指针之间的最大高度小于当前指针的高度,那么即使将指针向中间移动,也无法增加面积。的值,将较小的值对应的指针向中间移动,同时计算当前两个指针之间的面积,并更新最大面积。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。,分别指向数组的左右两端。原创 2024-03-05 19:54:43 · 407 阅读 · 0 评论 -
leetcode128. 最长连续序列
找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为。给定一个未排序的整数数组。解释:最长数字连续序列是。原创 2024-03-04 22:00:17 · 343 阅读 · 0 评论 -
python numpy极简版代码实现IOU和NMS
【代码】python极简洁版本实现iou和nms。原创 2024-03-03 19:58:02 · 356 阅读 · 0 评论 -
迭代法实现二叉树前序/中序/后序遍历
二叉树前序/中序/后序遍历是最简单的题目之一,类似于二分/快排/链表反转,是在求职期间必熟必会的算法!在这里记录下三种遍历的迭代实现,动画版解释戳。原创 2024-03-03 19:22:53 · 250 阅读 · 0 评论 -
leetcode230. 二叉搜索树中第K小的元素
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。原创 2024-03-02 21:48:36 · 267 阅读 · 0 评论 -
C++ 大堆根/小堆根 priority_queue的区别
例如,下面的代码创建了一个 priority_queue,并使用 top() 和 pop() 方法访问和删除元素,并得到一个元素从大到小排序的vector。大堆是一种特殊的完全二叉树,其中每个节点的值都大于或等于其子节点的值。的元素总是按照优先级排序,最高优先级的元素总是在队列的顶部。是两种不同类型的堆数据结构,它们的主要区别在于堆顶元素的值。的元素总是按照优先级排序,最高优先级的元素总是在队列的顶部。是一个大堆,即堆顶元素是整个堆中最大的元素。的元素总是按照降序排列,堆顶元素是整个堆中最大的元素。原创 2024-03-03 11:42:54 · 466 阅读 · 0 评论 -
经典动态规划题目leetcode322. 零钱兑换
如果没有任何一种硬币组合能组成总金额,返回 -1。然后,程序遍历每个硬币,对于每个硬币,程序遍历从该硬币面值到。被设置为0,其他位置被设置为一个很大的数(这里设置为。这个C++程序首先定义了一个动态规划数组dp,其中。的所有金额,更新dp数组。具体来说,对于每个金额。,程序比较兑换i元所需的最少硬币数量和兑换。(即使用当前硬币),取两者中的最小值。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。元所需的最少硬币数量。,则表示无法兑换,返回-1。元所需的最少硬币数量。元所需的最少硬币数量加上。原创 2024-03-02 20:11:29 · 462 阅读 · 0 评论 -
leetcode73. 矩阵置零
给定一个二维整数矩阵,当矩阵中的元素值为0时,将该元素所在的行和列全部置为0。原创 2024-03-02 18:40:00 · 487 阅读 · 0 评论 -
leetcode169. 多数元素的四种解法
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于。摩尔投票法,投我++,不投–,超过一半以上的人投我,那我稳赢哇。你可以假设数组是非空的,并且给定的数组总是存在多数元素。leetcode169. 多数元素。原创 2024-03-02 22:09:52 · 340 阅读 · 0 评论 -
C++实现conv2D 卷积运算
具体来说,代码首先计算输出矩阵的大小,即输入矩阵的大小减去卷积核的大小再加一。然后,代码初始化输出矩阵,将其所有元素设置为零。接着,代码遍历输入矩阵,对于每个位置,计算卷积核在输入矩阵上的位置,然后遍历卷积核,计算卷积核和输入矩阵对应元素的乘积,并将结果累加到输出矩阵的对应位置上。最后,代码返回输出矩阵。代码首先计算输出矩阵的大小,然后初始化输出矩阵。接着,代码遍历输入矩阵,对于每个位置,计算卷积核在输入矩阵上的位置,然后遍历卷积核,计算卷积核和输入矩阵对应元素的乘积,并将结果累加到输出矩阵的对应位置上。原创 2024-03-03 11:08:21 · 528 阅读 · 0 评论 -
秒杀leetcode子数组问题的模板“前缀和+哈希表”
umap 的初始值为。以上代码实现了一个函数 subarraySum,用于计算一个整数数组 nums 中所有和为 k 的子数组的数量。中的每个元素 n,将其加到 sum 上,然后计算当前子数组和减去 k 的结果 cur。答: 假设当前前缀和为sum,我们的目标是求解一个连续的和为k的子数组,假设子数组标号从i到j,即求。给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。中存在,则表示存在一个前缀和为 cur 的子数组,其和为 k,因此将。原创 2024-03-03 14:07:36 · 835 阅读 · 0 评论 -
leetcode 3. 最长不含重复的子字符串的五种解法
leetcode链接:最长不含重复的子字符串题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。原创 2021-07-10 12:15:51 · 570 阅读 · 0 评论 -
C++ map分别按照key和value排序
#include <iostream>#include <map>#include <set>#include <algorithm>using namespace std;// Function to convert a map<key,value> to a multimap<value,key>multimap<int, string> invert(map<string, int> &am原创 2020-12-26 12:54:37 · 555 阅读 · 0 评论 -
leetcode 215. TopK的四种解法
leetcode链接:数组中的第K个最大元素题目描述在未排序的数组中找到第k个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设k总是有效的,且 1 ≤ k ≤ 数组的长度。思路分析这是一道非常经典的题目,在LeetcodeTop中出现频率更是高居第一!思路一最简答的原创 2020-11-17 12:41:40 · 471 阅读 · 0 评论 -
leetcode 381.O(1) 时间插入、删除和获取随机元素 - 允许重复
leetcode链接:O(1) 时间插入、删除和获取随机元素 - 允许重复题目描述设计一个支持在平均 时间复杂度 O(1) 下, 执行以下操作的数据结构。注意: 允许出现重复元素。insert(val):向集合中插入元素 val。remove(val):当 val 存在时,从集合中移除一个 val。getRandom:从现有集合中随机获取一个元素。每个元素被返回的概率应该与其在集合中的数量呈线性相关。API示例// 初始化一个空的集合。RandomizedCollection colle原创 2020-10-31 10:47:41 · 256 阅读 · 0 评论 -
leetcode 1512. 好数对的数目
leetcode链接:leetcode 1512. 好数对的数目题目描述给你一个整数数组 nums。如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。返回好数对的数目。示例 1:输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是(0,3), (0,4), (3,4), (2,5),下标从 0 开始示例 2:输入:nums = [1,1,1,1]输出:6解释:数组中的每组数字都是原创 2020-10-25 12:11:22 · 231 阅读 · 0 评论 -
leetcode 371. 两整数之和
leetcode 371. 两整数之和不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1递归解法a ^ b可以得到两数相加不进位的加法结果(a & b) << 1可以得到两数相加产生的进位将不进位的加法结果与进位相加,即可得到两数相加的实际结果。需要注意的是:不进位加法结果与进位相加有可能再次造成进原创 2020-10-10 23:14:22 · 174 阅读 · 0 评论 -
leetcode 349. 两个数组的交集
题目链接:349. 两个数组的交集给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。思路第一个vector转为set,然后遍历第二个vector,若第二个vector元素在set中存在,则把该元素存下来。最后因为题目输出要原创 2020-10-10 20:47:07 · 210 阅读 · 1 评论 -
C++ 二分查找模板和leetcode原题示例
二分查找二分查找是刷题重要的一环,在leetcode较多题目都可以用二分查找解决。二分查找基本思想如下:对一个有序的数据集合,查找的思想类似分治思想,每次通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间缩小为0。/** * 注意在实现的时候: * 1、循环终止条件: low <= high * 2、mid的取值,假如low和high比较大的话,取 (low + high) / 2, * 容易发生溢出,改进的写原创 2020-10-04 21:29:05 · 342 阅读 · 0 评论 -
C++动态规划模板和leetcode原题
leetcode 地址连续子数组的最大和剑指offer第42题这道题目基本是考察动态规划的最简单题目啦????动态规划:状态转移方程:dp[i] = max(dp[i-1] + nums[i], nums[i]),其中dp[i]表示以索引i为结束点基准的子数组的最大值。初始状态:dp[0]= nums[0]。class Solution {public: int maxSubArray(vector<int>& nums) { for(i原创 2020-10-03 14:02:05 · 360 阅读 · 2 评论 -
leetcode108 将有序数组转换为二叉搜索树
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。示例:给定有序数组: [-10,-3,0,5,9],一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 0 / \ -3 9 / / -10 5递归解法/** * Definition for a binary tree node. * struct原创 2020-10-02 22:43:54 · 93 阅读 · 0 评论 -
leetcode x 的 n 次幂函数递归和非递归解法
原题链接:https://leetcode-cn.com/problems/powx-n/实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2^-2 = 1/(2^2) = 1/4 = 0.25说明:-100.0 < x < 100.0n 是 32 位有符号整数,其原创 2020-10-02 22:12:50 · 316 阅读 · 0 评论 -
斐波那契数列的Rust解法(递归和非递归)
递归解法fn fib(n:i32) -> i32{ if(n < 0){ panic!("input can not be less than zero!"); } else if(n == 1 || n == 2){ 1 } else{ return fib(n - 1) + fib(n -...原创 2020-01-29 16:08:51 · 992 阅读 · 4 评论 -
Leetcode 643. 子数组最大平均数 I
题目给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数。示例 1:输入: [1,12,-5,-6,50,3], k = 4输出: 12.75解释: 最大平均数(12-5-6+50)/4 = 51/4 = 12.75注意:1 <= k <= n <= 30,000。所给数据范围 [-10,000,10,000]。思路划窗求k个数的和...原创 2019-04-21 14:28:08 · 216 阅读 · 0 评论 -
leetcode 303. 区域和检索 - 数组不可变
题目:给定一个整数数组 nums,求出数组从索引 i 到j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5) -> -1sumRange(0, 5) -> -3说明:你可以假设数组不可变。...原创 2019-04-19 23:28:10 · 133 阅读 · 0 评论 -
数据结构和算法必知必会的50个代码实现
今天在GitHub上发现了个非常不错的项目,目前star 4700+,项目主要讲数据结构和算法,有多种语言 50个代码实现。实现语言有c++,c#,go,java,javascript,object-c,python,scala,swift,还有全世界最好的语言php。地址:https://github.com/wangzheng0822/algo涉及内容如下:数组实现一个支持动态扩容...转载 2019-05-23 22:29:06 · 457 阅读 · 0 评论 -
C++ reverse函数源码解析
逆序(反转)无论是在C或是C++中用的都特别多,常用于数组,字符串,容器等,其本身的函数参数也不复杂。标准C中是没有recerse()函数的,这是C++的一个新增函数,使用需要包含头文件#include <algorithm>reverse函数用于反转在[first,last)范围内的顺序(包括first指向的元素,不包括last指向的元素),reverse函数没有返回值te...原创 2019-05-28 12:56:27 · 5090 阅读 · 2 评论 -
C++ 给vector去重的三种方法
第一正种方法是简单的利用set的特性,这部分代码比较简单,直接上code:#include <iostream>#include <vector>#include <set>using namespace std;int main(){ int myints[] = {1,2,3,1,1}; int len = sizeof(m...原创 2019-05-28 13:53:37 · 74211 阅读 · 8 评论 -
动态规划之leetcode 64. 最小路径和
链接:leetcode 64. 最小路径和题目给定一个包含非负整数的 m * n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径1→3→1→1→1的总和最小。思路解析这是一道非常基础简单的动态规划问题,适合理解动...原创 2019-05-28 15:20:34 · 559 阅读 · 0 评论 -
leetcode155 最小栈
题目155. 最小栈设计一个支持 push,pop,top操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minSta...原创 2019-05-28 23:46:06 · 160 阅读 · 0 评论 -
leetcode 654最大二叉树
力扣链接:654. 最大二叉树题目:给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。Example 1:输入: [3,2,1,6,0,5]输...原创 2019-06-05 23:34:48 · 205 阅读 · 0 评论 -
剑指offer 树的子结构
牛客网地址:树的子结构题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路第一步在树A中查找与根节点一样的节点,实际上就是树的遍历,可以采用递归的方式;第二步是判断树A中以R为根节点的子树是不是和树B具有相同的结构。同样,我们也可以用递归的思路来考虑:如果节点R的值和树B的根节点不相同,则以R为根节点的子树和树B肯定不具有相同的结点;...原创 2019-06-08 16:22:46 · 499 阅读 · 0 评论 -
剑指offer 最小的K个数
牛客网链接:最小的K个数题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路先给vector排序,然后截取前k个元素并返回,注意处理边界。AC代码class Solution {public: vector<int> GetLeastNumbers_Solution(vector&l...原创 2019-06-18 23:16:20 · 118 阅读 · 0 评论 -
剑指offer 二叉搜索树的第k个结点
牛客网地址:二叉搜索树的第k个结点题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如(5,3,7,2,4,6,8 )中,按结点数值大小顺序第三小结点的值为4。解法一思路二叉搜索树(Binary Search Tree),(又:二叉查找树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空...原创 2019-06-10 18:34:59 · 128 阅读 · 0 评论