![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
文章平均质量分 78
一些算法的笔记
东条希尔薇
一名喜欢编程的在校大学生
展开
-
单调栈的实现和应用
单调栈讲解问题引入假设我们这儿有一个数组arr我们现在想得到数组中任意一个数左边第一个比它小(或大)的下标位置和右边第一个比它小(或大)的下标位置的信息比如上面的数字6,左边第一个比它小的数字是2,对应下标位置是2右边第一个比它小的数字是1,对应下标位置4,所以能生成以下信息6:[2,4]而我们规定,左边或者右边没有比其小的数字的话,把答案设为-1而我们现在需要每个数字的对应信息,这种问题我们该怎么求解呢?很容易想到暴力方法,我们遍历每一个数字,然后把每个数字往左往右遍历一遍查找符合要原创 2022-03-19 17:32:52 · 920 阅读 · 17 评论 -
滑动窗口(最大最小值)的经典例题
滑动窗口简单概念滑动窗口是我们假想出的一种数据结构,我们在这篇文章实现的窗口,能较快速的求区间最大最小值在一些区间不回退的题目中运行效率也十分优秀设窗口的左边界为l,右边界为r,(规定l<=r恒成立)我们可以通过滑动右边界,从窗口的右边进入数字也可以通过滑动左边界,从窗口左边出数字滑动窗口求区间最大值(leetcode239)原题链接题目描述:给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口原创 2022-02-23 22:39:18 · 3027 阅读 · 28 评论 -
一些经典的递归题
汉罗塔,字符串排列,反转栈等原创 2022-02-13 17:04:32 · 3696 阅读 · 32 评论 -
并查集实现及其应用
先看看度娘给出的定义吧:并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。总结一下:如果我原创 2022-02-10 13:14:28 · 1540 阅读 · 26 评论 -
高精度运算(除法待完善)
我们知道,在c语言中,数据的存储是有范围的,超出了这个范围的数据将不能有效的进行存储和运算而超出c语言储存范围的数,不能用c语言基本数据类型储存的数据,就叫做大数所以,为了解决大数的运算问题,我们来介绍一下如何在c语言中实现大数运算大数加减法首先介绍最基本的大数加减法这篇文章中我们把任意小于200位的非负整数的数都称作大数例如:88888888888888888888,123456789987654321而我们要储存这么大的数字,只能用一个字符数组来储存char a[200]={0};原创 2022-02-01 18:31:43 · 2529 阅读 · 9 评论 -
前缀树的应用和实现(c++)
前缀树原创 2022-01-28 14:17:52 · 1979 阅读 · 24 评论 -
二叉树DP解题套路
帮助大家解决树形DP问题原创 2022-01-27 23:40:57 · 3160 阅读 · 33 评论 -
算法笔记——归并排序及其基础面试题
再谈归并排序在我以前的数据结构专栏中已经对归并排序做了介绍,这里我们开始先复习一下归并排序的思路与代码归并排序用到了分治的思想,将数组不断细分成小的几个区间,将每个区间排成有序后,再将大区间排为有序代码实现:(非递归实现)void _MergeSort(vector<int>&arr,int l,int m,int r);//归并操作的函数void MergeSort(vector<int>&arr){ int n=arr.size(); int原创 2022-01-16 12:18:03 · 1897 阅读 · 35 评论 -
每日一题:尾数相等
题目描述对于任意一个大于1的整数K,一定存放两个自然数M,N(其中M<N)满足以下条件KM>=1000KN>=1000KM和KN末尾三位数相等现在给定一个任意正整数K,求出满足条件的最小M+N的值其中K的位数<=10思路在这道题中,K的位数大于10,这样KM就会是一个很大的数字,大数在C语言中无法储存不过万幸的是,我们只需要计算这个数字的后三位即可所以这里的处理方法是:只需要计算后三位,对计算结果没有影响取出后三位的方法:k%=1000而这道题我们原创 2021-10-01 18:03:00 · 558 阅读 · 18 评论 -
算法笔记:摩尔投票法
问题引入:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。我们很轻松的想到暴力求解的方法:定义两个指针i和j,i记录该位置的数字,j向后遍历每遇到相等的数字就将计数器+1如果计数器大于了n/2,就停止,并返回此时的i但这种算法的时间复杂度较高,为O(n2),显然达不到题目的要求所以,为了将这道题的时间复杂度降到O(n),我们可以使用摩尔投票法算法简介摩尔投票法,是一个方便求众数的算法,其算法核心思想是:将数组中第一个元素记原创 2021-10-24 12:01:28 · 2415 阅读 · 29 评论 -
浅谈函数栈帧
作者的码云地址:https://gitee.com/dongtiao-xiewei后续作者会更新力扣的每日一题系列,原代码会全部上传码云,推荐关注哦~笔芯~内存管理和函数栈帧我们知道计算机分配内存时主要分为以下的几个区域我们也知道,函数是在栈区上开辟空间的。每一次的函数调用(包括main函数,自定义函数等)都会在栈区上开辟足够大的空间 ,用于本次函数中的内部操作(数据保护,局部变量控制),这块空间我们称为函数栈帧。这篇文章可以为大家解答以下问题:局部变量怎么创建? 为..原创 2021-08-06 20:30:52 · 578 阅读 · 5 评论 -
通过模拟strcpy函数学习编程思想
strcpy函数简介strcpy是c语言库中的一个函数,需要包含<string.h>头文件。它可以实现数组的拷贝。将src数组中的所有元素(包括末尾的\0)拷贝在另一个dst数组中。以下是cplusplus网站中对strcpy函数的介绍我们通过介绍,可以先尝试自己模拟strcpy的实现最初版代码我们需要传进两个常量字符串在这个函数中,然后对每个字符进行操作void my_strcpy(char* dst,char* src){ while(*src!..原创 2021-08-04 23:52:09 · 329 阅读 · 9 评论 -
C语言刷题笔记:序列操作(增加、删除、去重、合并)
1.增加有一个有序数字序列,从小到大排序,将一个新输入的数插入到序列中,保证插入新数后,序列仍然是升序。输入描述:第一行输入一个整数(0≤N≤50)。第二行输入N个升序排列的整数,输入用空格分隔的N个整数。第三行输入想要进行插入的一个整数。输出描述:输出为一行,N+1个有序排列的整数。输入:51 6 9 22 308输出:1 6 8 9 22 30思路及源代码展示原数组:1 6 9 22 30 ..原创 2021-07-14 21:05:35 · 1375 阅读 · 5 评论 -
C语言入门必看!(二)
前言 呜呜呜这里先给各位小伙伴们道一个歉,真的不是UP主我有意鸽大家的,而是最近期末考试周,唉,来自学生党的kuq原创 2021-06-09 00:23:19 · 891 阅读 · 4 评论 -
每日一题----空瓶子喝可乐问题
问题描述有一家店的老板,今天心情特别好,特地为大家带来一项优惠活动。三个空的可乐瓶子可以换一瓶可乐来喝。小明是一位非常爱喝可乐的同学,他原创 2021-06-07 00:31:40 · 3603 阅读 · 14 评论 -
C语言入门必看!(一)
前言: 小伙伴们大家好鸭!我是东条希尔薇。今天我为大家带来C语言的大致知识框架,帮助各位刚入门C语言的小伙伴和准备入门的小伙伴一个原创 2021-06-06 13:13:36 · 809 阅读 · 8 评论 -
编程小白的秃头之路!
CSDN的各位大佬们好鸭!我是来自青海大学的大一学生,目前就读于计算机专业。虽然是小白,不过内心也向往码代码的生活。大家可以称呼我东条希尔薇(个人资料为啥改不了嘤嘤嘤)。从今天开始就在CSDN和大家一起进步啦!不过呢,学习编程,光停留在口号上面是远远不够的,下面是我自己学习编程的思路以及自己的目标。为什么要学习编程?编程嘛,可能绝大多数人的印象停留在掉头发,熬夜码代码上2333。。。不过,学习编程,通俗地说,如果你学好了,你就可以挣很多很多的钱,从此干饭啥的都不成问题了哈哈哈。不过话说回来,编程其实对原创 2021-06-03 11:36:18 · 634 阅读 · 17 评论