![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
每日一练
三少爷的剑!
从学生手上收来的资源整理并确认是否有用,如有雷同,纯属巧合。
展开
-
无重叠区间(贪心算法)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入:原创 2020-12-17 20:55:31 · 4565 阅读 · 0 评论 -
活动选择(贪心算法)
有n个需要在同一天使用同一个教室的活动a1, a2, …, an,教室同一时刻只能由一个活动使用。每个活动a[i]都有一个 开始时间s[i]和结束时间f[i]。一旦被选择后,活动a[i]就占据半开时间区间[s[i],f[i])。如果[s[i],f[i])和[s[j],f[j])互不重 叠,a[i]和a[j]两个活动就可以被安排在这一天。求使得尽量多的活动能不冲突的举行的最大数量。本题解法的关键在于找到一个比较方法,让这个比较方法尽可能多的安排活动,而要使活动尽可能的多,则每次选择活动结束时间最早的即可原创 2020-12-17 20:10:19 · 5355 阅读 · 0 评论 -
多机调度问题(贪心算法)
某工厂有n个独立的作业,由m台相同的机器进行加工处理。作业i所需的加工时间为ti,任何作业在被处理时不能中 断,也不能进行拆分处理。现厂长请你给他写一个程序:算出n个作业由m台机器加工处理的最短时间解题思路:当n<=m时,只要将作业分给每一个机器即可;当n>m时,首先将n个作业从大到小排序,然后依此顺序将作业分配给空闲 的处理机。也就是说从剩下的作业中,选择需要处理时间最长的,然后依次选择处理时间次长的,直到所有的作业全部处 理完毕,或者机器不能再处理其他作业为止。如果我们每次是将需要.原创 2020-12-13 16:55:03 · 7204 阅读 · 0 评论 -
跳跃游戏(贪心算法)
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例 1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例 2:输入: [3,2,1,0,4]输出: false解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。来源:力转载 2020-12-02 22:20:08 · 4162 阅读 · 0 评论 -
三步问题(每日一练)
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/three-steps-problem-lcci著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution {public: int waysToStep(int n) {原创 2020-12-01 19:39:59 · 4161 阅读 · 0 评论 -
移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zeroes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution {publ...原创 2020-11-30 22:09:53 · 3961 阅读 · 0 评论 -
有效的字母移位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-anagram著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution {p原创 2020-11-30 21:37:31 · 3990 阅读 · 0 评论 -
素数筛选法(埃拉托斯特尼筛法)
统计所有小于非负整数 n 的质数的数量。示例 1:输入:n = 10输出:4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。示例 2:输入:n = 0输出:0示例 3:输入:n = 1输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/count-primes著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。筛选法的主要思想就是,找到每个素数,然后根据素数的.原创 2020-11-30 20:26:42 · 4594 阅读 · 0 评论 -
增减字符串匹配
给定只含 "I"(增大)或 "D"(减小)的字符串 S ,令 N = S.length。返回 [0, 1, ..., N] 的任意排列 A 使得对于所有 i = 0, ..., N-1,都有: 如果 S[i] == "I",那么 A[i] < A[i+1] 如果 S[i] == "D",那么 A[i] > A[i+1]示例 1:输入:"IDID"输出:[0,4,1,3,2]示例 2:输入:"III"输出:[0,1,2,3]示例 3:输入:"...原创 2020-10-11 15:30:51 · 3991 阅读 · 0 评论 -
山脉数组(练手)
给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。让我们回顾一下,如果 A 满足下述条件,那么它是一个山脉数组: A.length >= 3 在 0 < i < A.length - 1 条件下,存在 i 使得: A[0] < A[1] < ... A[i-1] < A[i] A[i] > A[i+1] > ... > A[A.length - 1]来源:力扣(L...原创 2020-10-11 15:19:50 · 4078 阅读 · 0 评论 -
回文串分割(c++,每日一题)(动态规划) 给出一个字符串s,分割s使得分割出的每一个子串都是回文串 计算将字符串s分割成回文分割结果的最小切割数
给出一个字符串s,分割s使得分割出的每一个子串都是回文串计算将字符串s分割成回文分割结果的最小切割数例如:给定字符串s="aab",返回1,因为回文分割结果["aa","b"]是切割一次生成的。class Solution {public: /** * * @param s string字符串 * @return int整型 */ bool isp(string s,int start,int end){ whi原创 2020-08-31 20:42:38 · 4483 阅读 · 0 评论 -
背包问题 II 中文 English 有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值. 问最多能装入背包的总价值是多大? 样例 样例 1
背包问题 II中文English有 n 个物品和一个大小为 m 的背包. 给定数组 A 表示每个物品的大小和数组 V 表示每个物品的价值.问最多能装入背包的总价值是多大?样例样例 1:输入: m = 10, A = [2, 3, 5, 7], V = [1, 5, 2, 4]输出: 9解释: 装入 A[1] 和 A[3] 可以得到最大价值, V[1] + V[3] = 9 样例 2:输入: m = 10, A = [2, 3, 8], V = [2, 5, 8]原创 2020-08-30 00:15:24 · 4226 阅读 · 0 评论 -
带权值的最小路径和(c++,动态规划)
给定一个由非负整数填充的m x n的二维数组,现在要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径。注意:你每次只能向下或向右移动。动态规划经典题class Solution {public: /** * * @param grid int整型vector<vector<>> * @return int整型 */ int minPathSum(vector<vector<int&原创 2020-08-27 22:53:03 · 4558 阅读 · 0 评论 -
一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start“的位置)。 机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish“的位置)。 可以有多少种不同
题目描述一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。可以有多少种不同的路径从起点走到终点?上图是3×7大小的地图,有多少不同的路径?备注:m和n小于等于100class Solution {public: /** * * @param m int整型 * @param n int整型 .原创 2020-08-27 22:28:53 · 6031 阅读 · 0 评论 -
计算三角矩阵的最小路径长(动态规划)(c++,每日一练)
题目描述给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字,例如,给出的三角形如下:[[2],[3,4],[6,5,7],[4,1,8,3]]最小的从顶部到底部的路径和是2+3+5+1= 11。注意:如果你能只用O(N)的额外的空间来完成这项工作的话,就可以得到附加分,其中N是三角形中的行总数。经典动态规划题,把每个点的最小路径求出来,最后求出总的最小路径即可。class Solution {public: ...原创 2020-08-27 16:41:50 · 4171 阅读 · 0 评论 -
分割字符串(动态规划)(c++,每日一练)
题目如下:给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。例如:给定s=“leetcode”;dict=["leet", "code"].返回true,因为"leetcode"可以被分割成"leet code".Given a stringsand a dictionary of wordsdict, determine ifscan be segmented into a...原创 2020-08-27 15:43:23 · 4154 阅读 · 0 评论 -
二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal著作...原创 2020-08-14 02:58:47 · 3947 阅读 · 0 评论 -
前k个高频单词(每日一题)
给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。示例 1:输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2输出: ["i", "love"]解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。 注意,按字母顺序 "i" 在 "love" 之前。示例 2:输入: ["the", "day", ...原创 2020-08-13 00:12:33 · 4205 阅读 · 1 评论 -
24点游戏算法(c++每日一练)
问题描述:给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利输入:4个1-10的数字。[数字允许重复,但每个数字仅允许使用一次,测试用例保证无异常数字]输出:trueorfalse#include<iostream>#include<vector>using namespace std;bool is(vector<float>a, int num, int key){ if (a.size() == 0) { return k..原创 2020-08-02 23:48:48 · 4943 阅读 · 2 评论 -
数组中只出现一次的数组(这道题考察异或操作)
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。这道题是由出现一个一次数字演变而来,懂一个数字的解法,对于两个数字,根据他们异或的位不同,分出两个数组,分别进行一个数字的解法,就能快速得出。一个字的数字解法是把所有数字都异或一遍,值就是那一个出现一次的数字。以下是我写的代码:用了三次一个出现一个数字的解法class Solution {public: void FindNumsAppearOnce(vector<int>原创 2020-07-28 22:33:55 · 3941 阅读 · 0 评论 -
连续子数组的最大和(每日一题)
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)class Solution {public:原创 2020-07-27 12:03:35 · 3975 阅读 · 0 评论 -
栈的压入,弹出序列(每日一题)
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution {public: bool IsPopOrder(vector<int> pushV,vector<int> popV) {原创 2020-07-26 22:44:36 · 3976 阅读 · 0 评论 -
包含min函数的栈(每日一题)
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。class Solution { public: stack<int>a,b;public: void push(int value) { a.push(value); if(b.size()!=0&&b.top()>value) { b.push(val原创 2020-07-26 22:17:32 · 3919 阅读 · 0 评论 -
最难的问题(每日一踢)
NowCoder生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是军团中的一名军官,需要把发送来的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A 都分别替换成字母F),其他字符不 变,并且消息原文的所有字母都是大写的。密码中的字母与原文中的字母对应关系如下。密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z原文字原创 2020-07-18 23:42:21 · 4032 阅读 · 0 评论 -
两数之和(每日一题)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作.原创 2020-07-16 23:35:18 · 4033 阅读 · 0 评论 -
亲密字符串(每日一题)
给定两个由小写字母构成的字符串 A 和 B ,只要我们可以通过交换 A 中的两个字母得到与 B 相等的结果,就返回 true ;否则返回 false 。示例 1:输入: A = "ab", B = "ba"输出: true示例 2:输入: A = "ab", B = "ab"输出: false示例 3:输入: A = "aa", B = "aa"输出: true示例 4:输入: A = "aaaaaaabc", B = "aaaaaaacb"输出: true.原创 2020-07-16 00:10:35 · 4148 阅读 · 0 评论 -
快到碗里来(每日一题)
问题描述:小喵们很喜欢把自己装进容器里的(例如碗),但是要是碗的周长比喵的身长还短,它们就进不去了。现在告诉你它们的身长,和碗的半径,请判断一下能否到碗里去。输入格式:一个正整数total来表明总共有多少组数据依次输入total组数据输入描述:输入有多组数据。每组数据包含两个整数n (1≤n≤2^128) 和r (1≤r≤2^128),分别代表喵的身长和碗的半径。圆周率使用3.14。输出格式:符合条件输出“Yes”,不符合条件输出“No”这道题很简单的,用double型原创 2020-07-15 00:54:58 · 4110 阅读 · 0 评论 -
变态跳台阶(真变态啊)(每日一练)(剑指offer)
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级......它也可以跳上n级。此时该青蛙跳上一个n级的台阶总共有多少种跳法?这道题我做的时候也是一脸懵,后来想了想,发现,当只有一个台阶时,它只能有一种跳法,当有两个台阶时,它可以直接跳到第二个台阶,也可以有一个台阶一个台阶的跳,两种跳法当有三个台阶时,它有四种跳法。这里需要注意的是,它可以第一次跳一个台阶,那么剩下的台阶是不是就是2个台阶的跳法,它若一次跳两个台阶,那么剩下的台阶就是一个台阶的跳法。根据这个思想,可以得出的公式是f原创 2020-07-14 23:21:51 · 4004 阅读 · 0 评论 -
树根(每日一题)
数根可以通过把一个数的各个位上的数字加起来得到。如果得到的数是一位数,那么这个数就是数根;如果结果是两位数或者包括更多位的数字,那么再把这些数字加起来。如此进行下去,直到得到是一位数为止。比如,对于24 来说,把2 和4 相加得到6,由于6 是一位数,因此6 是24 的数根。再比如39,把3 和9 加起来得到12,由于12 不是一位数,因此还得把1 和2 加起来,最后得到3,这是一个一位数,因此3 是39 的数根。现在给你一个正整数,输出它的数根。输入描述:输入包含多组数据。每组数据数据包含一原创 2020-07-14 22:36:51 · 4624 阅读 · 0 评论 -
两个数组的交集(每日一练)
给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。来源:力扣(LeetCode)链接:https://leetcode-cn.com/proble...原创 2020-07-14 00:30:22 · 4060 阅读 · 0 评论 -
长整数的加法
问题描述:求两个不超过200为的非负整数的和输入数据:输入有两行,每行是一个不超过200位的非负整数,没有多于的前导0.输出要求:输出只一行,即相加后的结果。结果里不能有多于的前导0,即如果结果是342,那么就不能输出0342.输入样例:22222222222222222222222223333333333333333333333333输出样例:5555555555555555555555555这道题用字符数组就可以很好避免int double类型的溢出问题#inclu原创 2020-07-13 23:15:33 · 4285 阅读 · 0 评论 -
年终奖(动态规划)(每日一练)
小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。class Bonus原创 2020-07-12 23:47:01 · 4164 阅读 · 0 评论 -
非递减数列(每日一练)
给你一个长度为 n 的整数数组,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (0 <= i <= n-2),总满足 nums[i] <= nums[i + 1]。示例 1:输入: nums = [4,2,3]输出: true解释: 你可以通过把第一个4变成1来使得它成为一个非递减数列。示例 2:输入: nums = [4,2,1]输出: false解释: 你不能在只改变一.原创 2020-07-12 00:43:24 · 4178 阅读 · 0 评论 -
微信红包(每日一练)
春节期间小明收到了很多微信红包,非常开心。。。。class Gift {public: int getValue(vector<int> gifts, int n) { for(int i=0;i<(gifts.size()/2+1);i++) { int k=0; for(int j=i;j<gifts.size();j++) {原创 2020-07-10 21:59:26 · 4379 阅读 · 0 评论 -
找出一个字符串中第一个只出现一次的字符(空间换时间)(时间复杂度O(N))(每日一题)
输入描述:输入一个非空字符串1输出描述:输出第一个只出现一次的字符,如果不存在输出-11示例1输入asdfasdfo输出o用空间换时间的方法,遍历一次即可#include<iostream>#include<string>using namespace std;void find(string a){ char s = NULL; int i = 0; int p[256] = { 0 }; for (i.原创 2020-07-09 00:25:48 · 4203 阅读 · 0 评论 -
小易的升级之路(每日一题)
题目描述小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3...bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?输入描述:对于每组数据,第一行是两个整数n(1≤n<100000)原创 2020-07-08 23:24:58 · 4023 阅读 · 0 评论 -
重排链表(数据结构基础回顾)
给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:https:原创 2020-06-30 00:39:18 · 4080 阅读 · 0 评论 -
删除链表中的节点(实现的函数只给一个参数)(数据结构回顾)
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。现有一个链表 -- head = [4,5,1,9],它可以表示为:示例 1:输入: head = [4,5,1,9], node = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], node = 1输出: [4,5,9]解释: 给定你链.原创 2020-06-29 23:49:12 · 4192 阅读 · 0 评论 -
用两个栈实现一个队列(c++)(剑指offer)(简单易懂)
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。给出两个栈,stack1和stack2,完成一个队列,由于队列是先进先出,而栈是新进后出,后进新出,所以根据这个性质。把栈stack1当做队列的头部分,把stack2当做队列的尾部分,stack1实现队列的插入元素功能,stack2实现队列的尾删功能。对于stack1的插入元素功能,实现的代码 void push(int node) { stack1.push(node);原创 2020-06-25 23:39:03 · 4095 阅读 · 0 评论 -
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。(c++)(剑指offer)
求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。这里很明显让你用递归函数进行编写,代码如下:class Solution {public: int Sum_Solution(int n) { if(n==1) { return 1; } else { return n+原创 2020-06-25 00:53:06 · 4156 阅读 · 2 评论