数据结构
文章平均质量分 56
qq_43650421
这个作者很懒,什么都没留下…
展开
-
力扣笔记_在排序数组中查找数字 I
1.题目:在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: 2示例 2:输入: nums = [5,7,7,8,8,10], target = 6输出: 0来源:剑指 Offer 53 - I. 在排序数组中查找数字 I2.解题思路:①采用暴力解法,直接遍历得到结果:class Solution { public int search(int[] nums, int targ原创 2021-07-16 11:26:46 · 107 阅读 · 0 评论 -
Proteus电梯课设
通过Proteus实现8层楼电梯:8层楼的电梯,可以实现内部和外部的按键的功能,以及通过的算法实现楼层的选择。有数码管显示和lcd显示,以及到达楼层后的铃声提示。原创 2021-06-12 23:11:42 · 1230 阅读 · 3 评论 -
动态规划力扣学习笔记
1035.不相交的线在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:nums1[i] == nums2[j]且绘制的直线不与任何其他连线(非水平线)相交。请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。示例一:输入:nums1 = [1,4,2], nums2 = [1,2,4]输出:2解释:可原创 2021-05-22 09:41:59 · 121 阅读 · 0 评论 -
二叉搜索树的范围和_力扣笔记
给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。示例1:输入:root = [10,5,15,3,7,null,18], low = 7, high = 15输出:32来源:力扣链接:938.二叉搜索树的范围和法一:采用深度优先搜索,因为二叉搜索树是中序遍历是有序的,因此通过中序遍历,以及判断来获得结果。class Solution { int res = 0; public int rangeSumBST(TreeNode原创 2021-04-27 08:23:10 · 199 阅读 · 0 评论 -
在 D 天内送达包裹的能力_力扣笔记
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。示例 1:输入:weights = [1,2,3,4,5,6,7,8,9,10], D = 5输出:15解释:船舶最低载重 15 就能够在 5 天内送达所有包裹,如下所示:第 1 天:1, 2, 3, 4, 5第 2 天:6,原创 2021-04-26 08:57:25 · 58 阅读 · 0 评论 -
递增顺序搜索树_力扣笔记
1.题目:给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]来源:力扣(LeetCode)链接:897.递增顺序搜索树错误解法:class Solution {原创 2021-04-25 09:02:02 · 72 阅读 · 0 评论 -
最大整除子集_力扣笔记
1.题目:给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:answer[i] % answer[j] == 0 ,或answer[j] % answer[i] == 0如果存在多个有效解子集,返回其中任何一个均可。示例 1:输入:nums = [1,2,3]输出:[1,2]解释:[1,3] 也会被视为正确答案。示例 2:输入:nums = [1,2,4,8]输原创 2021-04-23 19:34:18 · 151 阅读 · 0 评论 -
前缀和_力扣笔记
1.一维前缀和:①题目:给定一个整数数组 nums,求出数组从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点。实现 NumArray 类:NumArray(int[] nums) 使用数组 nums 初始化对象int sumRange(int i, int j) 返回数组 nums 从索引 i 到 j(i ≤ j)范围内元素的总和,包含 i、j 两点(也就是 sum(nums[i], nums[i + 1], … , nums[j]))示例:输入:[“NumArray”原创 2021-04-22 21:02:16 · 392 阅读 · 0 评论 -
删除元素_力扣笔记
1.题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3,3,4原创 2021-04-18 09:00:09 · 76 阅读 · 0 评论 -
存在重复元素 III_力扣笔记
1.题目:给你一个整数数组 nums 和两个整数 k 和 t 。请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] - nums[j]) <= t ,同时又满足 abs(i - j) <= k 。如果存在则返回 true,不存在返回 false。示例 1:输入:nums = [1,2,3,1], k = 3, t = 0输出:true2.思路:①题目中给出了两个数组下标的范围 abs(i - j) <= k,如何将元素限制在这个范围中?从这一点我们可以想原创 2021-04-17 12:43:28 · 127 阅读 · 0 评论 -
打家劫舍_力扣
力扣是一共有三道关于打家劫舍的题,是学习动态规划很好的范例,总结一下。第一题:1.题目:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额原创 2021-04-15 16:12:49 · 94 阅读 · 0 评论 -
前缀树_力扣
1.题目:请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWith(String prefix) 如果之前已经插入的字符串 word 的前缀之一为 prefix ,返回 true ;否则,返回 false 。示例:输入原创 2021-04-14 15:01:05 · 55 阅读 · 0 评论 -
二叉搜索树的最小绝对值之差_力扣笔记
1.题目:给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。输入:输入:root = [4,2,6,1,3]输出:12.解题思路:考察任意两个元素之差的最小值,直观的思路是对二叉树组成的序列进行排序后,再计算相邻元素之差的最小值即为结果。而这有一个很重要的结论:二叉树中序遍历得到的结果是有序的。既可以通过把每个元素的值都保存在一个数组里,再进行比较;更好的方法是使用一个变量保存前驱结点的值,这样就可以边遍历边更新。3.代码:class Solution {原创 2021-04-13 08:29:00 · 94 阅读 · 0 评论 -
丑数 II(力扣笔记)
原题(264):给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。原题链接:原题链接法一:直接遍历,此种方法按序遍历时间复杂度很高:class Solution {public: int nthUglyNumber(int n) { if (n == 1) retur原创 2021-04-11 09:27:10 · 79 阅读 · 0 评论 -
搜索旋转数组_力扣笔记
已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,4,4,5,6,6,7] 在下标 5 处经旋转后可能变为 [4,5,6,6,7,0,1,2,4,4] 。给你原创 2021-04-07 08:46:52 · 50 阅读 · 0 评论 -
双指针法笔记
双指针法比较常见的有左右指针和快慢指针。1.快慢指针:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。输入:nums = [1,1,1,2,2,3]输出:5, nums = [1,1,2,2,3]解释:函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。 不需要考虑数组中超出新长度后面原创 2021-04-06 08:37:38 · 70 阅读 · 0 评论 -
最长公共子序列Leetcode,动态规划
题目:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。输入:text1 = “abcde”, text2 = “ace”输出:3解释:最长公共子序列是 “ace” ,它的长度为 3 。输入:text1 = “abc”, text2 = “abc”输出:3解释:最长公共子序列原创 2021-04-03 23:13:30 · 104 阅读 · 0 评论 -
求二叉树的双亲结点
思路就是如果当前任一个孩子结点的值等于k,说明当前节点即为所需结点的双亲结点,通过递归实现唯一比较麻烦的是要写很多条件,不然会报错。主要功能实现是preorder函数其他是构建和打印二叉树的函数。#include<stdio.h>#include<vector>#include<queue>using namespace std;#define Type char//要求1.二叉树中的结点个数2.叶子结点个数3.某结点层次4.二叉树的宽度struct原创 2020-07-08 20:53:22 · 14769 阅读 · 1 评论 -
二叉树求第k层的最大元素DFS和BFS求解
这道题我用了两种思路求解,深度优先遍历和广度优先遍历,深度优先遍历代码更加简单,广度优先遍历首先要解决如何判断当前位于第几层的问题。首先讲解深度优先遍历:比如有这样一个图:深度优先遍历的顺序是这样的,如果要查找的元素在第三层:#include<stdio.h>#include<queue>#define MaxSize 20using namespace std;#define Type int//要求1.二叉树中的结点个数2.叶子结点个数3.某结点层次4.二原创 2020-07-08 20:42:00 · 229 阅读 · 0 评论 -
统计世界疫情数据排序算法的应用
针对最近某天的世界各国新冠肺炎疫情数据,对累积确诊病例数排名靠前的100个国家(包括中国)的新增确诊,累积治愈和死亡病例数,治愈率和病死率分别进行排序,要求采用三种以上不同的排序方法来实现,并输出排序后的国家名和相应的病例数。这里使用了6种不同的排序方法来进行排序,分别是:1.折半插入排序2.希尔排序3.冒泡排序4.快速排序5.选择排序6.归并排序其中数据需要和程序保存在同一个文件夹中,或者修改路径也成。#include<iostream>#include<vector>原创 2020-06-28 20:16:21 · 962 阅读 · 3 评论 -
求有向图或无向图中的特定路径
数据结构实验题:实验一:编写一个程序exp8-10.cpp,设计相关算法完成以下功能。①输出如果8.56所示的有向图G从顶点5到顶点2的所有简单路径。②输出如图8.56所示的有向图G从顶点5到顶点2的所有长度为3的简单路径。③输出如图8.56所示的有向图G从顶点5到顶点2的最短路径。#include<iostream>#include<vector>using namespace std;#define MAXV 20//定义最大结点数#define Node 6原创 2020-06-28 20:05:32 · 1113 阅读 · 0 评论 -
多项式的相乘和相加问题
数据结构的课后习题:①求两个多项式的相加运算:掌握线性表的应用和有序单链表的二路归并算法设计。②求两个多项式的相乘运算:深入掌握单链表应用的算法设计。首先是表示多项式的数据结构:使用的单链表,存储的信息包括系数和指数,以及后继结点。首先肯定要写好初始化函数(可以实现输入),析构函数和显示数据的打印函数。最重要的是如何实现多项式的相加和相乘,如果要相加的话根据多项式相加的规律是,次数相同的项合并在一起相加,次数不同的项单列,因此可以写一个判断语句判断多项式的次数,这里要注意输入的时候要满足降幂排列,这样才有原创 2020-06-28 19:57:56 · 2193 阅读 · 2 评论