
算法从入门到放弃
分治算法、动态规划、贪心算法、回溯算法
贪心的葡萄
算法与数据结构,计算智能,进化计算,神经网络,C/C ,linux,python,matlab
展开
-
某势科技笔试题
输入一个串"PUSH -100;POP 2",输出模拟栈的结果。PUSH XX表示把XX压栈,POP XX表示从栈中弹出XX个数。原创 2022-09-19 21:43:13 · 195 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。给定 target = 20,返回 false。给定 target = 5,返回 true。...原创 2022-08-10 16:05:00 · 168 阅读 · 0 评论 -
24. 两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。链表中节点的数目在范围[0,100]内。输入head=[1,2,3,4]输入head=[1]输出[2,1,4,3]输入head=[]......原创 2022-07-29 16:09:36 · 568 阅读 · 0 评论 -
某节校招测开题1-A股线上打新
某节校招测开题1-A股线上打新【输入】首行输入分配起始号num,配号数x。接下来几行输入n和末n位数,中间空格隔开。输入END结束。如:12345 52 12 233 123 345END【输出】判断是否中签。末n位数与打新号码末n位数相配则中签,输出YES,然后依次输出中签号码。否则输出NO。如:YES345【注】打新号码{num,num+1,…,num+x-1}。#include <bits/stdc++.h>using namespace std;/原创 2022-04-18 11:33:03 · 206 阅读 · 0 评论 -
某节校招测开题2
某节校招测开题2(AC60%)描述给定一个数组序列, 需要求选出一个区间, 使得该区间是所有区间中经过如下计算的值最大的一个:区间中的最小数 * 区间所有数的和最后程序输出经过计算后的最大值即可,不需要输出具体的区间。如给定序列 [6 2 1]则根据上述公式, 可得到所有可以选定各个区间的计算值:[6] = 6 * 6 = 36;[2] = 2 * 2 = 4;[1] = 1 * 1 = 1;[6,2] = 2 * 8 = 16;[2,1] = 1 * 3 = 3;[6, 2, 1]原创 2022-04-16 21:52:00 · 136 阅读 · 0 评论 -
BM67 不同路径的数目(一)
BM67 不同路径的数目(一)描述一个机器人在m×n大小的地图的左上角(起点)。机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)。可以有多少种不同的路径从起点走到终点?备注:m和n小于等于100,并保证计算结果在int范围内数据范围:0 < n,mn,mn,m ≤100,保证计算结果在32位整型范围内要求:空间复杂度 O(nm)O(nm),时间复杂度 O(nm)O(nm)进阶:空间复杂度 O(1)O(1),时间复杂度 O(min(n,m))O(min(n,m))cla原创 2022-04-15 19:44:21 · 251 阅读 · 0 评论 -
BM68 矩阵的最小路径和
BM68 矩阵的最小路径和描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。数据范围: 1 ≤ n,mn,mn,m ≤ 500,矩阵中任意值都满足 0 ≤ ai,ja_{i,j}ai,j ≤ 1000要求:时间复杂度 O(nm)O(nm)例如:当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,所选择的最小累加和路径如下图所示原创 2022-04-15 19:30:00 · 285 阅读 · 0 评论 -
BM58 字符串的排列
BM58 字符串的排列描述输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。数据范围:n < 10n<10要求:空间复杂度 O(n!)O(n!),时间复杂度 O(n!)O(n!)输入描述:输入一个字符串,长度不超过10,字符只包括大小写字母。class Solution {public: bool isExi原创 2022-04-15 17:08:24 · 222 阅读 · 0 评论 -
43. 字符串相乘
43. 字符串相乘给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”, num2 = “456”输出: “56088”提示:1 <= num1.length, num2.length <= 200num1 和原创 2022-04-05 11:00:24 · 159 阅读 · 0 评论 -
415. 字符串相加
415. 字符串相加给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。示例 1:输入:num1 = “11”, num2 = “123”输出:“134”示例 2:输入:num1 = “456”, num2 = “77”输出:“533”示例 3:输入:num1 = “0”, num2 = “0”输出:“0”提示:1 <= num原创 2022-04-05 10:12:54 · 232 阅读 · 0 评论 -
46. 全排列
46. 全排列给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 <= nums[i] <原创 2022-04-04 19:21:04 · 125 阅读 · 0 评论 -
20. 有效的括号
20. 有效的括号给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示:1 <=原创 2022-04-04 17:35:25 · 376 阅读 · 0 评论 -
14. 最长公共前缀
14. 最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:“”解释:输入不存在公共前缀。提示:1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英文字母组成cla原创 2022-04-04 16:10:34 · 378 阅读 · 0 评论 -
正则表达式匹配
正则表达式匹配10. 正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。示例 1:输入:s = “aa”, p = “a”输出:false解释:“a” 无法匹配 “aa” 整个字符串。示例 2:输入:s = “aa”, p = “a*”输出:true解释:因为 ‘*’ 代表可以匹配零个或多个前面的那一个原创 2022-04-01 21:24:23 · 487 阅读 · 0 评论 -
KMP算法和RK算法实现字符串匹配
KMP算法和RK算法实现字符串匹配28. 实现 strStr()实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf(原创 2022-04-01 16:56:55 · 199 阅读 · 0 评论 -
28. 实现 strStr()
28. 实现 strStr()实现 strStr() 函数。给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。说明:当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与 C 语言的 strstr() 以及 Java 的 indexOf() 定义相符。示例 1:输入:h原创 2022-04-01 10:25:38 · 119 阅读 · 0 评论 -
剑指 Offer II 019. 最多删除一个字符得到回文
剑指 Offer II 019. 最多删除一个字符得到回文给定一个非空字符串 s,请判断如果 最多 从字符串中删除一个字符能否得到一个回文字符串。示例 1:输入: s = “aba”输出: true示例 2:输入: s = “abca”输出: true解释: 可以删除 “c” 字符 或者 “b” 字符示例 3:输入: s = “abc”输出: false提示:1 <= s.length <= 105s 由小写英文字母组成class Solution {public原创 2022-03-30 22:15:30 · 224 阅读 · 0 评论 -
剑指 Offer II 077. 链表排序
剑指 Offer II 077. 链表排序给定链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node.val <= 105进阶:你可以在 O(n log n) 时间复杂度原创 2022-03-30 16:07:10 · 952 阅读 · 0 评论 -
692. 前K个高频单词
692. 前K个高频单词给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。示例 1:输入: words = [“i”, “love”, “leetcode”, “i”, “love”, “coding”], k = 2输出: [“i”, “love”]解析: “i” 和 “love” 为出现次数最多的两个单词,均为2次。注意,按字母顺序 “i” 在 “love” 之前。原创 2022-03-30 12:16:19 · 710 阅读 · 1 评论 -
884. 两句话中的不常见单词
884. 两句话中的不常见单词句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却 没有出现 ,那么这个单词就是 不常见的 。给你两个 句子 s1 和 s2 ,返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。示例 1:输入:s1 = “this apple is sweet”, s2 = “this apple is sour”输出:[“sweet”,“sour”]示例 2:输入:s1 = “apple a原创 2022-03-30 09:27:28 · 134 阅读 · 0 评论 -
217. 存在重复元素
217. 存在重复元素给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。示例 1:输入:nums = [1,2,3,1]输出:true示例 2:输入:nums = [1,2,3,4]输出:false示例 3:输入:nums = [1,1,1,3,3,4,3,2,4,2]输出:true提示:1 <= nums.length <= 105-109 <= nums[i] <= 109原创 2022-03-30 09:05:06 · 219 阅读 · 0 评论 -
350. 两个数组的交集 II
350. 两个数组的交集 II给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]提示:1 <= nums1.length, n原创 2022-03-29 17:20:49 · 131 阅读 · 0 评论 -
349. 两个数组的交集
349. 两个数组的交集给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]解释:[4,9] 也是可通过的提示:1 <= nums1.length, nums2.length <= 10000 &l原创 2022-03-29 17:05:37 · 287 阅读 · 0 评论 -
961. 在长度 2N 的数组中找出重复 N 次的元素
961. 在长度 2N 的数组中找出重复 N 次的元素给你一个整数数组 nums ,该数组具有以下属性:nums.length == 2 * n.nums 包含 n + 1 个 不同的 元素nums 中恰有一个元素重复 n 次找出并返回重复了 n 次的那个元素。示例 1:输入:nums = [1,2,3,3]输出:3示例 2:输入:nums = [2,1,2,5,3,2]输出:2示例 3:输入:nums = [5,1,5,2,5,3,5,4]输出:5提示:2 <= n原创 2022-03-29 16:52:35 · 279 阅读 · 0 评论 -
236. 二叉树的最近公共祖先
236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5原创 2022-03-29 16:00:57 · 169 阅读 · 0 评论 -
144.&94.&145. 二叉树的前/中/后序遍历
144.&94.&145. 二叉树的前/中/后序遍历144.二叉树的前序遍历/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x原创 2022-03-29 15:32:34 · 75 阅读 · 0 评论 -
150. 逆波兰表达式求值
150. 逆波兰表达式求值根据 逆波兰表示法,求表达式的值。有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。注意 两个整数之间的除法只保留整数部分。可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入:tokens = [“2”,“1”,"+",“3”,"*"]输出:9解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例 2:输入:tokens = [“4”,“1原创 2022-03-29 11:17:36 · 275 阅读 · 1 评论 -
JZ31 栈的压入、弹出序列
JZ31 栈的压入、弹出序列描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。0<=pushV.length == popV.length <=1000-1000<=pushV[i]<=1000pushV 的所有数字均不相同示例1输入:[1,2,原创 2022-03-29 10:50:40 · 104 阅读 · 0 评论 -
215. 数组中的第K个最大元素
215. 数组中的第K个最大元素给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4提示:1 <= k <= nums.length <= 104-104 <= nums[i] <= 104class So原创 2022-03-29 10:30:18 · 432 阅读 · 0 评论 -
JZ42 连续子数组的最大和
JZ42 连续子数组的最大和描述输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。数据范围:1 <= n <= 2\times10^51<=n<=2×105-100 <= a[i] <= 100−100<=a[i]<=100要求:时间复杂度为 O(n)O(n),空间复杂度为 O(n)O(n)进阶:时间复杂度为 O(n)O(n),空间复杂度为 O(1)O(1)class原创 2022-03-23 17:04:12 · 339 阅读 · 0 评论 -
1996. 游戏中弱角色的数量
1996. 游戏中弱角色的数量你正在参加一个多角色游戏,每个角色都有两个主要属性:攻击 和 防御 。给你一个二维整数数组 properties ,其中 properties[i] = [attacki, defensei] 表示游戏中第 i 个角色的属性。如果存在一个其他角色的攻击和防御等级 都严格高于 该角色的攻击和防御等级,则认为该角色为 弱角色 。更正式地,如果认为角色 i 弱于 存在的另一个角色 j ,那么 attackj > attacki 且 defensej > defense原创 2022-01-28 14:25:27 · 126 阅读 · 0 评论 -
1. 两数之和
1. 两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], ta原创 2022-01-27 15:54:30 · 96 阅读 · 0 评论 -
8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi)【方法:DFA确定有限状态自动机】请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其原创 2022-01-27 12:20:30 · 117 阅读 · 0 评论 -
12. 整数转罗马数字
12. 整数转罗马数字罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V原创 2022-01-26 14:34:32 · 157 阅读 · 0 评论 -
11. 盛最多水的容器
11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 1:输入:[1,8,6,2,5,4,8,3,7]输出:49解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。示例 2原创 2022-01-23 15:06:09 · 85 阅读 · 0 评论 -
7. 整数反转
7. 整数反转[INT_MAX 和INT_MIN 在limits.h中]给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。示例 1:输入:x = 123输出:321示例 2:输入:x = -123输出:-321示例 3:输入:x = 120输出:21示例 4:输入:x = 0输出:0提示:-231 &原创 2022-01-23 12:44:23 · 403 阅读 · 0 评论 -
1332. 删除回文子序列
1332. 删除回文子序列给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这个字符串就是一个回文。示例 1:输入:s = “ababa”输出:1解释:字符串本身就是回文序列,只需要删除一次。示例 2原创 2022-01-22 21:25:25 · 334 阅读 · 0 评论 -
5. 最长回文子串
5. 最长回文子串给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成class Solution {public: string lo原创 2022-01-19 20:10:23 · 351 阅读 · 0 评论 -
6. Z 字形变换
6. Z 字形变换[生气是无能的表现,这道题太让我生气了。。。]将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “PAYPALISHIRING” 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“PAHNAPLSIIGYIR”。请你实现这个将字符串进行指定行数变换的函数:string convert(string原创 2022-01-19 19:33:10 · 100 阅读 · 0 评论 -
219. 存在重复元素 II
219. 存在重复元素 II给你一个整数数组 nums 和一个整数 k ,判断数组中是否存在两个 不同的索引 i 和 j ,满足 nums[i] == nums[j] 且 abs(i - j) <= k 。如果存在,返回 true ;否则,返回 false 。示例 1:输入:nums = [1,2,3,1], k = 3输出:true示例 2:输入:nums = [1,0,1,1], k = 1输出:true示例 3:输入:nums = [1,2,3,1,2,3], k = 2输出原创 2022-01-19 16:04:03 · 421 阅读 · 0 评论