数据结构与算法
文章平均质量分 81
常用数据结构和算法整理,Leetcode刷题合集
Ziy.
up up up!
展开
-
团队天梯赛L1
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。输出格式:如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也原创 2021-04-05 00:12:36 · 808 阅读 · 0 评论 -
第十一届蓝桥杯大赛第二次模拟(软件类)
T1:12.5MB【问题描述】 在计算机存储中,12.5MB是多少字节?【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。12.5 MB = (12.5*1024 KB)*1024 B = 13107200 B (用计算器算的童鞋不要忘记去掉逗号)T2:最多边数【问题描述】 一个包含有2019个结点的有向图,最多包含多少条边?(不允许有重边)【答案提交】 这是一道结果填空的题,你只需要算出原创 2021-04-16 08:39:49 · 172 阅读 · 0 评论 -
第十一届蓝桥杯大赛软件类省赛第二场 C/C++ 大学 B 组
试题A.门牌制作小蓝要为一条街的住户制作门牌号。这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?#include<bits/stdc++.h> using namespace std;int ma原创 2021-04-17 00:48:55 · 121 阅读 · 0 评论 -
贪心算法学习
算法说明:要获得最优结果,则要求中间的每步策略都是最优的,即在当前状态下局部最优。参考书籍:A LeetCode Grinding Guide一、分配问题【Leetcode】455. 分发饼干先对两个vector进行排序,然后按照顺序来遍历。这一排序后遍历两个vector来依次比较元素大小的方法的思想本身就是一种局部最优的方法。class Solution {public: int findContentChildren(vector<int>& g, v原创 2021-07-28 18:57:21 · 356 阅读 · 0 评论 -
并查集
基础知乎上一个大佬写的“拉帮结派”版并查集:算法学习笔记总结一下我的收获并查集的引入初始化:各自成帮派,父节点即为自己int fa[N];void init(){ for(int i=0;i<N;i++){ fa[i] = i; }}查:递归找帮主,一层层地查找直至根节点,如果两个节点的根节点相同,则为同一帮派void find(int i){ if(fa[i] == i) return fa[i]; return find(fa[i]);}合并:两原创 2021-04-17 00:47:24 · 106 阅读 · 0 评论 -
三种搜索算法
总结老规矩–站在巨人的肩膀上前行,看大佬们的经验帖:算法入门–深度优先搜索总结一下收获深度优先搜索:从一个顶点开始沿一条路走到底,直到到达终点或者不能走,回溯到上一节点,找到该层的其他节点,继续深搜。有递归和非递归实现。缺点:难以寻找最优解,仅仅能寻找有解的情况。优点:每次只用维护一个节点,内存消耗小。广度优先搜索:从一个顶点开始到下一层所有的节点都开一条路径,不回溯。一般用队列和while实现。缺点:每一个节点入队,其同层的所有节点都要入队,在树的层次较深且子节点较多时内存消耗太大原创 2021-04-17 22:05:01 · 860 阅读 · 0 评论 -
动态规划
1.问题描述一公司购买长钢条,将其切为短钢条出售,假设切割没有成本,公司希望知道最佳的切割方案!假设我们知道一段长度为i的钢条的价格为pi(i = 1,2,3…),钢条长度均为整英寸,下面给出一个价格表:长度i 1 2 3 4 5 6 7 8 9 10价格pi 1 5 8 9 10 17 17 20 24 30给定一长度为n的钢条和一张价格表(i =1, 2,3…n),求切割钢条的方案,使的利润最大,可以不进行切割思路:把前面的长度的最大利润求出来后,后面的长度可以分原创 2021-04-17 17:42:14 · 108 阅读 · 0 评论 -
千奇百怪的排序算法
1. 快速排序采用左闭右闭的写法参考视频:清华大学博士讲解Python数据结构与算法(完整版)全套100节def partition(dataset,left,right): temp = dataset[left] while left < right: while left < right and temp <= dataset[right]: right -= 1 dataset[left] = dat原创 2021-09-01 17:50:20 · 82 阅读 · 0 评论 -
居合斩!二分查找
参考书籍:《LeetCode 101: A LeetCode Grinding Guide (C++ Version)》算法解释二分查找:将待查找区间分成两部分并只取一部分继续查找,查找问题中,如果对时间复杂度的要求有 \loglog,通常都需要用到二分查找二分查找的区间左右端的取舍:要不左闭右开(满足C++和Python等语言的习惯),要不左闭右闭(便于处理边界条件),尽量保持一种写法。或根据实际情况考虑极限情况来确定区间端点的取舍,如区间只剩下一个或两个数。二分查找和双指针的区别:二分查找.原创 2021-09-01 17:30:33 · 140 阅读 · 0 评论 -
算法学习:双指针
26、删除有序数组中的重复项给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-dupl原创 2021-08-07 21:44:19 · 226 阅读 · 0 评论