![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
文章平均质量分 51
小时候挺菜丶
只用一样东西,不明白他的道理,实在不高明
展开
-
sha256算法细节详解
sha256算法原创 2022-04-10 17:32:36 · 3824 阅读 · 0 评论 -
最短无序连续子数组
问题描述:给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。请你找出符合题意的 最短 子数组,并输出它的长度。示例 :输入:nums = [2,6,4,8,10,9,15]输出:5解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。思路:维护两个单调栈,一个是数组从左到右遍历的递增栈s(只有大于等于栈顶的数据才可以入栈),一个是数组从右往左遍历的递减栈s2(只有小于等于栈顶的数据才原创 2022-02-27 23:04:08 · 197 阅读 · 0 评论 -
任务调度器
问题描述给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。示例 1:输入:tasks = [“A”,“A”,“A”,“B”,“B原创 2022-02-20 22:29:05 · 128 阅读 · 0 评论 -
单调栈应用(每日温度)
问题描述:给定一个整数数组temperatures,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指在第 i 天之后,才会有更高的温度。如果气温在这之后都不会升高,请在该位置用 0 来代替。示例:输入: temperatures = [73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1,0,0]思路分析:首先构造一个单调栈类型的容器,只允许往栈里面插入小于等于栈顶数据的元素,整个栈呈现一个"金字塔"形状,如下图就是一个单调栈:对于te原创 2022-02-19 22:58:27 · 359 阅读 · 0 评论 -
Z 字形变换
问题描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:原字符串根据规则得到Z字形变换结果之后,输出需要从左往右逐行读取,产生出一个新的字符串,根据上图,上述字符串 “PAYPALISHIRING” 的变换结果就是:“PAHNAPLSIIGYIR”。再如输入字符串为 “PAYPALISHIRING” 行数为4时,排列如下:上述字符串 “PAYPALISHIRING” 的变原创 2021-12-18 21:56:57 · 530 阅读 · 0 评论 -
Manacher算法
此篇文章给出了最长回文串的普通解法:https://blog.csdn.net/qq_45987579/article/details/121324132?spm=1001.2014.3001.5501但是这种解法计算每个遍历点时并没有充分利用之前遍历点计算出的结论,时间复杂度为O(n2),本文算法充分利用回文字符串的性质,降低算法时间复杂度,该算法就是马拉车算法。首先给出一段字符串分析:“abctftghjhgtftclu”,这个字符串首先可以拆分成3段:第一段:“ab”第二段:“ctftgh原创 2021-12-11 22:44:05 · 707 阅读 · 0 评论 -
无重复字符的最长子串
问题描述:给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。初步思路:类似这种数组类型的,想要查找某种条件下存在前后关联的问题,第一个想到的方法就是动态规划:要想获取结果子串,必须遍历整个字符串,假设在遍历到第n个节点之后,想要去比对该节点与其相邻目标子串比对字符:1、相邻目标子串存在n节点字符,想要根据目标子串改字符的位置,取改字符之后的字符串和n节点字符重新规划目标子串;2、相邻目标子串不存在n节点字符,将n节点加入子串即可;实现:int lengthOfLongestS原创 2021-10-04 10:53:15 · 69 阅读 · 0 评论 -
打家劫舍!
问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。初步思路:每一个数组的元素都会被遍历到才有可能得到最后的结果,每一个遍历节点都会有一个其对应的最大金额,由于小偷不能偷两隔壁的现金,所以对于每一户被偷的人家,他的隔壁的隔壁或者隔壁的隔壁的隔壁一定会被偷原创 2021-10-03 18:12:45 · 62 阅读 · 0 评论 -
长度最小的子数组
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。typedef int type; //定义队列数据类型struct QueueNode{ int data; struct QueueNode *next;};// end(移除端) ---> Node -next> Node -next> Node <--- first(插入端)struct原创 2020-07-04 14:10:22 · 99 阅读 · 0 评论 -
最大子序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入的数组记录在int* nums里面,数组成员个数记录在int numsSize里面。循环numsSize次,每次去查找当前位置一直往前可以找到的最大连续子数组,最后会得到numsSize个最大值,再取其中最大值即可。采用动态规划实现:int maxSubArray(int* nums, int numsSize){ int i = 0; int MaxTemp = nums[0];原创 2021-09-04 21:26:45 · 54 阅读 · 0 评论