
算法
学习算法相关内容
幼儿园的高财生
一名在校的辣鸡大学生。在泥浆中摸爬滚打十几年,只能不断在学习中寻找成就感和满足感,趁青春还在,抓住最后青春的小尾巴,对未来充满希望的的仰望天空。
展开
-
人民币金额大写问题
人民币金额大写问题原创 2022-02-21 22:11:46 · 164 阅读 · 0 评论 -
PTA乙级1005-- 继续(3n+1)猜想(C++实现)
1.题目描述:卡拉兹(Callatz)猜想:对任何一个正整数n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把(3n+1)砍掉一半。这样一直反复砍下去,最后一定在某一步得到n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证(3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程...原创 2021-09-20 10:08:08 · 172 阅读 · 0 评论 -
解码方法——动态规划
题目描述:一条包含字母 A-Z 的消息通过以下映射进行了 编码 :'A' -> 1'B' -> 2...'Z' -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,"11106" 可以映射为:"AAJF",将消息分组为(1 1 10 6) "KJF",将消息分组为(11 10 6)注意,消息不能分组为 (1 11 06) ,因为 "06" 不能映射为 "F" ,这是由于 "6" 和 "06" ...原创 2022-01-21 20:16:11 · 575 阅读 · 0 评论 -
设计哈希映射——C++实现
直接看代码,简单易懂。class MyHashMap {private: vector<list<pair<int, int>>> data; static const int base = 769; static int hash(int key) {//哈希函数 return key % base; }public: //初始化 MyHashMap() :data(base) {} v.原创 2022-01-10 14:23:38 · 719 阅读 · 0 评论 -
二叉树的最近公共祖先
二叉树 公共祖先原创 2022-01-28 19:46:12 · 688 阅读 · 0 评论 -
乘积为正数的最长子数组长度——动态规划
题目描述:给你一个整数数组 nums,请你求出乘积为正数的最长子数组的长度。一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。请你返回乘积为正数的最长子数组长度。解题思路:代码:int getMaxLen(vector<int>& nums) { int n=nums.size(); if(n==1) return nums[0]>0?1:0; int posi=0,negi=0,first=-...原创 2022-01-19 17:03:31 · 381 阅读 · 0 评论 -
省份数量(BFS/DFS)--leetcode
题目描述:有 n 个城市,其中一些彼此相连,另一些没有相连。如果城市 a 与城市 b 直接相连,且城市 b 与城市 c 直接相连,那么城市 a 与城市 c 间接相连。省份 是一组直接或间接相连的城市,组内不含其他没有相连的城市。给你一个 n x n 的矩阵 isConnected ,其中 isConnected[i][j] = 1 表示第 i 个城市和第 j 个城市直接相连,而 isConnected[i][j] = 0 表示二者不直接相连。返回矩阵中 省份 的数量。提示..原创 2022-01-11 15:50:28 · 106 阅读 · 0 评论 -
删除二叉搜索树中的节点
二叉搜索树 删除结点原创 2022-01-28 17:09:29 · 416 阅读 · 0 评论 -
Z字法搜索二维矩阵
题目描述:思路:代码: //Z字形搜索 bool searchMatrix(vector<vector<int>>& matrix, int target) { int m=matrix.size(),n=matrix[0].size(); int x=0,y=n-1;//右上角开始 while(x<m&&y>=0){ ...原创 2022-01-12 18:23:34 · 439 阅读 · 0 评论 -
二叉搜索树中的第k小元素
二叉搜索树原创 2022-01-28 19:09:18 · 835 阅读 · 0 评论 -
等差数列划分--leetcode
题目描述:如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。思路:差分+计数优化算法:代码:int numberOfArithmeticSlices(vector<int>& nums) { i.原创 2022-01-19 15:56:35 · 395 阅读 · 0 评论 -
动态规划训练营(leetcode)
1.删除并获得点数题目描述:给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数思路:注意到若 \textit{nums}nums 中不存在某个元素 xx,则选择任一小于 xx 的元素不会影响到大于 xx 的元素的选择。...原创 2022-01-19 15:38:26 · 491 阅读 · 0 评论 -
Leetcode2—两数相加(链表)(C++实现)
1.题目描述:给你两个非空 的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0开头。2.代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ...原创 2021-09-21 12:41:58 · 372 阅读 · 0 评论 -
重复的DNA序列
题目描述:所有 DNA 都由一系列缩写为 'A','C','G' 和 'T' 的核苷酸组成,例如:"ACGAATTCCG"。在研究 DNA 时,识别 DNA 中的重复序列有时会对研究非常有帮助。编写一个函数来找出所有目标子串,目标子串的长度为 10,且在 DNA 字符串 s 中出现次数超过一次。方法一:哈希表代码1:vector<string> findRepeatedDnaSequences(string s) { int n = s.size();.原创 2022-01-19 01:46:07 · 189 阅读 · 0 评论 -
最长公共子序列——动态规划
动态规划 最长公共子序列长度原创 2022-01-22 16:09:04 · 297 阅读 · 0 评论 -
移除无效的括号
移除无效的括号 栈原创 2022-01-22 19:49:45 · 198 阅读 · 0 评论 -
两个字符串的删除操作
两个字符串的删除操作 动态规划原创 2022-01-22 16:47:10 · 175 阅读 · 0 评论 -
数组训练营1(leetcode)
想刷数组方面的题吗,那就进来看看吧原创 2022-01-13 16:26:45 · 286 阅读 · 0 评论 -
原地旋转图像——leetcode
题目描述:给定一个 n×n 的二维矩阵matrix 表示一个图像。请你将图像顺时针旋转 90 度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。思路:这无疑是一道数学题啊代码:void rotate(vector<vector<int>>& matrix) { int N = matrix.size(); for (int i = 0; i < N ...原创 2022-01-11 12:59:07 · 1405 阅读 · 0 评论 -
动态规划——单词拆分
动态规划 单词拆分原创 2022-01-21 21:15:07 · 468 阅读 · 0 评论 -
构造最长回文串
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。在构造过程中,请注意区分大小写。比如"Aa"不能当做一个回文字符串。注意:假设字符串的长度不会超过 1010。思路:算法:代码:#include<unordered_map>int longestPalindrome(string s) { unordered_map<char, int> m; int ans = 0; for (a...原创 2022-01-17 23:23:39 · 547 阅读 · 0 评论 -
最长递增子序列个数——动态规划
题目描述:解题思路:代码:int findNumberOfLIS(vector<int> &nums) { int n = nums.size(), maxLen = 0, ans = 0; vector<int> dp(n), cnt(n); for (int i = 0; i < n; ++i) { dp[i] = 1; cnt[i] = 1; for (int j =..原创 2022-01-21 21:51:53 · 210 阅读 · 0 评论 -
缺失的第一个正数
题目描述:给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为O(n)并且只使用常数级别额外空间的解决方案。前言:方法一:哈希表代码1://哈希表时间复杂度O(n),空间复杂度O(1)int firstMissingPositive(vector<int>& nums) { int n = nums.size(); for (int& num : nums) {...原创 2022-02-01 18:07:00 · 986 阅读 · 0 评论 -
Leetcode1— 两数之和(哈希表实现,时间复杂度O(n))
1.提目描述:给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。2.思路:注意到全部遍历的时间复杂度较高的原因是寻找 target - x 的时间复杂度过高。因此,我们需要一种更优秀的方法,能够快速寻找数组中是否存在目标元素。如果存在,我们需要找出它的索引。使用哈希表,...原创 2021-09-21 13:36:02 · 332 阅读 · 3 评论 -
找到小镇的法官
图论 找小镇的法官原创 2022-01-28 21:20:18 · 350 阅读 · 0 评论 -
Leetcode3. 无重复字符的最长子串(超简单)
1.题目描述:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。2.思路:a.用vector实现,一个装下标,一个装对应的数值;b.然后开始遍历,如果当前字符在vector出现过,就将当前元素以及之前的全部删除(但要记得将当前字符装进去,我就是忘记装当前的元素,导致只有一部分结果对,调试半天),使得数组中储存的永远是不含有重复字符的最长子串3.代码:初始版本(没有优化前的):就中间有点啰嗦,但最初的想法就是写出来的这个代码,最终写完之后,看到中间有...原创 2021-09-21 01:19:24 · 166 阅读 · 5 评论 -
乘积最大子数组——动态规划
题目描述:给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。思路和算法:代码1:int maxProduct(vector<int>& nums) { vector <int> maxF(nums), minF(nums); for (int i = 1; i < nums.size(); ++i) { maxF[i] = max...原创 2022-01-19 16:21:55 · 804 阅读 · 0 评论 -
买卖股票的最大利润II——动态规划、贪心
买卖股票的最大利润II 动态规划 贪心原创 2022-01-22 23:01:04 · 633 阅读 · 0 评论 -
有效的数独
数独 模拟题原创 2022-02-04 16:50:17 · 84 阅读 · 0 评论 -
最长的美好子字符串
最长的美好子字符串原创 2022-02-01 15:05:24 · 1164 阅读 · 0 评论 -
最长快乐字符串——贪心(ps:我一点也不快乐)
贪心 最长快乐字符串原创 2022-02-07 12:43:29 · 692 阅读 · 0 评论 -
递归和非递归求前缀后缀表达式(递归太牛了,大赞)
波兰表达式 逆波兰表达式 栈 递归 非递归原创 2022-03-13 12:16:37 · 754 阅读 · 0 评论 -
翻转一个数字——时间复杂度O(1)妙~
位运算原创 2022-02-06 13:03:42 · 289 阅读 · 0 评论 -
求32位机上的一个数字中二进制1的个数——时复O(1)妙死了
位运算原创 2022-02-06 12:39:37 · 304 阅读 · 0 评论 -
KMP算法——C++实现
KMP算法 找子串原创 2022-02-01 16:12:22 · 770 阅读 · 0 评论 -
划分字母区间(贪心)
题目描述:字符串S由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。思路:贪心代码://贪心vector<int> partitionLabels(string s) { int n=s.size(); if(n==1)return {1}; vector<int>ans; unordered_map<char,int>m;...原创 2022-01-18 15:30:29 · 335 阅读 · 0 评论 -
next_permutation函数讲解
按照STL文档的描述,next_permutation函数将按字母表顺序生成给定序列的下一个较大的排列,直到整个序列为降序为止。prev_permutation函数与之相反,是生成给定序列的上一个较小的排列。这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm>使用方法:next_permutation(数组头地址,数组尾地址);若下一个排列存在,则返回真,如果不存在则返回假若求上一个排列,则用prev_permutation1.举例i原创 2022-01-16 22:24:40 · 621 阅读 · 0 评论 -
Kadane 算法
Kadane 算法解释:伪代码如下:#Kadane's algorithmans = cur = Nonefor x in A: cur = x + max(cur, 0) ans = max(ans, cur)return ans原创 2022-01-11 18:20:28 · 1092 阅读 · 0 评论 -
数据结构——并查集
目录1.概念2.并查集的结构3.并查集的实现1)初始化节点2)查找当前元素所在树的根节点3)合并元素x, y所处的集合4)判断是否为同一个集合4.并查集的优化5.并查集的复杂度6.优化后的并查集实现1.概念并查集(Union Find)是一种用于管理分组的数据结构。它具备两个操作:(1)查询元素a和元素b是否为同一组 (2) 将元素a和b合并为同一组。注意:并查集不能将在同一...原创 2021-09-26 14:42:06 · 628 阅读 · 1 评论 -
数据结构-位图
1.概念:位图,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。位图其实是用数组实现的,数组的每一个元素的每一个二进制位都可以表示一个数据在或者不在,0表示数据存在,1表示数据不存在。因为比特位只有两种状态,要么是0,要么就是1,所以位图其实就是一种直接定址法的哈希,只不过位图只能表示这个值在或者不在。 如下图所示:当我们探测到25比特位的值为1时,我们就可以判断出136这个数据存在。2.位图的实现(主要接口)1) se..原创 2021-09-26 11:26:12 · 2213 阅读 · 4 评论