前期刷题
算法题的自我总结,写题的思路等等
和BUG做朋友的ZORO
这个作者很懒,什么都没留下…
展开
-
力扣刷题笔记:207. 课程表
题目:207. 课程表写题思路:这是一题典型的拓扑排序首先,我们根据题目意思,将课程关系做成邻接矩阵,并保存每个课程的入度再创建队列,保存入读为零的课程名,进入循环(退出条件是队列里没有元素)count 计数,u 保存队头元素,并将队头元素pop,再接着把将u作为先修课的课程indeg–,最后判断count 与numCourses 的比较源代码class Solution {public: bool canFinish(int numCourses, vector<ve原创 2020-10-25 21:56:28 · 321 阅读 · 0 评论 -
力扣刷题笔记:45. 跳跃游戏 II
题目:45. 跳跃游戏 II给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。思路主体思想:贪心正向遍历,找到当前可以跳到的最远距离,max_t 保存步数,en原创 2020-10-28 19:41:26 · 145 阅读 · 0 评论 -
力扣刷题笔记:122. 买卖股票的最佳时机 II
题目:122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票价格 = 3)原创 2020-10-28 19:33:09 · 93 阅读 · 0 评论 -
力扣刷题笔记:134. 加油站
题目:134. 加油站在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。如果你可以绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。说明:如果题目有解,该答案即为唯一答案。输入数组均为非空数组,且长度相同。输入数组中的元素均为非负数。示例 1:输入:gas = [1,2,3,4,5]cost = [3,4转载 2020-10-28 16:02:19 · 167 阅读 · 0 评论 -
力扣刷题笔记:763. 划分字母区间
题目:763. 划分字母区间字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。示例:输入:S = “ababcbacadefegdehijhklij”输出:[9,7,8]解释:划分结果为 “ababcbaca”, “defegde”, “hijhklij”。每个字母最多出现在一个片段中。像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。提示:S的长转载 2020-10-27 23:37:57 · 102 阅读 · 0 评论 -
力扣刷题笔记:44. 通配符匹配
题目:44. 通配符匹配给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。‘?’ 可以匹配任何单个字符。‘*’ 可以匹配任意字符串(包括空字符串)。两个字符串完全匹配才算匹配成功。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *。示例 1:输入:s = “aa”p = “a”输出: false解释: “a” 无法匹配 “aa” 整个字符串。思路:来自力扣大佬的题解转载 2020-10-27 23:22:02 · 158 阅读 · 0 评论 -
力扣刷题笔记:376. 摆动序列
题目:376. 摆动序列如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。给定一个整数序列,返回作为摆动序列的最长子序列的长度。 通过从原始序列中删除转载 2020-10-27 17:00:05 · 215 阅读 · 0 评论 -
力扣刷题笔记:135. 分发糖果
题目:135. 分发糖果源代码class Solution {public: //计数 int count(int n) { return (n * (n + 1)) / 2; } int candy(vector<int>& r) { int n = r.size(); if(n <= 1){ return n; } int candies转载 2020-10-28 19:49:21 · 200 阅读 · 0 评论 -
停车场管理系统(C语言作业)
问题描述:设停车场是可停放5辆车,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序停放。若停车场内已停满5辆车,则后来的汽车需在停车场外等候,当有车开走时,停车场外上的第一辆车可进入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的交费。设计要求:1.模拟上述管理过程。要求以顺序堆栈模拟停车场,以链式队列模拟停车场外等待车辆。2.从终端读入汽车到达或离去的数据,每组数据包括三项:(①原创 2020-08-10 10:06:23 · 2432 阅读 · 0 评论 -
数据结构--查找--散列表--C语言
散列表(空间换时间)散列函数的构建①直接定址法优点:以关键码key的某个线性函数值为散列地址,不会产生冲突。缺点:要占用连续地址空间,空间效率低。例:Hash(key)=a*key+b(a、b是常数)②除留余数法(优)Hash(key)=key % p(p是一个整数)关键:如何选取p?技巧:设表长为m,取p<=m且为质数处理冲突的方法①开放地址法(开地址法)思想:有冲...原创 2020-04-23 15:42:16 · 511 阅读 · 0 评论 -
数据结构--线索二叉树--C语言
线索二叉树的概念和存储结构①在有 n 个结点的二叉树中必定存在 n+1 个空链域(造成空间浪费)。②把这些空链域,建立相应结点的前驱结点信息和后继结点信息。规定:当某结点的左指针为空时,令该指针指向中序遍历二叉树是得到的该结点的前驱结点。当某结点的右指针为空时,令该指针指向中序遍历二叉树是得到的该结点的后继结点。③为了区别是左右孩子还是前驱后继, 我们在结点中添加两个线索typede...原创 2020-03-30 21:23:46 · 232 阅读 · 0 评论 -
数据结构--串的模式匹配算法--C语言
Brute-Force算法1:思路:从主串s=“s0s1s2s3…sn-1”的第一个字符开始与子串t="t0t1t2…tm-1"的第个字符进行比较, 若相等,则继续比较后续字符; 否则从主串s的第-个字符开始重新与子串t的第一个字符进行比较,若相等,则继续比较后续字符;否则从主串s的第三个字符开始重新与子串t的第一个字符进行比较;如此不断进行比较,若存在子串t中的每个字符依次和主串s中的一个连续...原创 2020-03-18 20:44:56 · 454 阅读 · 0 评论 -
数据结构--串--C语言
串的概述串(字符串):由n(n>=0)个字符组成的有限序列。一般记作s=“s0,s1,s2,…,sn”,其中s称作串名,n称作串的长度,双引号括起来的字符序列称作串的值。子串:一个串中任意个连续的字符组成的子序列。主串:包含子串的串称为子串的主串。该字符在串中的位置:一个字符在一个串中的位置序号(>=0)串相等:大小和值都相等。注:串“a”:既要存储字符‘a’,也要存储该串...原创 2020-03-18 20:21:24 · 168 阅读 · 0 评论 -
力扣刷题笔记:31. 下一个排列
题目:31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,11,1 →1,19,8,7,6 → 6,7,8,9思路:1:先从后往前,寻找下降序列,当源代码:class Solution {pub原创 2020-11-10 21:39:59 · 94 阅读 · 1 评论 -
力扣刷题笔记:2. 两数相加
题目2. 两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路这是一道模拟题,把情况分析好源代码/转载 2020-11-06 14:36:21 · 155 阅读 · 0 评论 -
力扣刷题笔记:143. 重排链表
题目:143. 重排链表算法:快慢指针寻找中间值翻转后半部分的链表两部分链表相加源代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} *原创 2020-10-20 21:48:26 · 138 阅读 · 0 评论 -
力扣学习笔记:142. 环形链表 II
题目:142.环形链表II建议:先看环形链表Ⅰ算法:哈希表和 Ⅰ类似,只是在碰到前面遇到过的结点,就返回该结点的地址即可快慢指针我们将入环结点之前的结点距离设为 a ,将在环上快慢指针相遇的结点逆时针到入环结点的距离设为 b ,将在环上快慢指针相遇的结点顺时针到入环结点的距离设为 c 。我们可以计算 a + n * c + (n + 1) * b = 2 * ( a + b) (快指针的速度是慢指针的两倍)化简得 a = c + (n - 1) * ( b + c)这样子,我们原创 2020-10-17 22:00:04 · 994 阅读 · 0 评论 -
力扣学习笔记:141. 环形链表
题目:https://leetcode-cn.com/problems/linked-list-cycle/算法:哈希表首先用指针遍历链表并用哈希表保存遍历时遇到的结点,如果下次遇到,就说明这个链表具有环快慢指针用快慢指针对链表遍历,如果有环的话,快指针一定会与慢指针碰头,碰头就是找到环的标准源代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNod原创 2020-10-17 21:45:55 · 92 阅读 · 0 评论 -
力扣学习笔记:997:有序数组的平方
题目:算法:我们用双指针算法解题写题过程:一开始我找的标准是第一个大于等于0的数,用mid_z表示从零增加的指针,用mid_f表示从零减少的指针。再来一次循环,在循环里分别对两个指针对应的值比较,并选择较小的插入ans容器。可是最后提交的时候超时了。仔细想想,这里有两个for循环,而且里面还有好多比较,这样子效率还不如先输入平方再排序的效率高。最后发现我的标准选错了,我应该从两头往中间走,这样子节约了很多次比较。算法主体:定义两个指针,分别指向头尾,并在循环里比较大小,并插入ans容器中即可。时原创 2020-10-16 19:13:19 · 85 阅读 · 0 评论 -
力扣学习笔记:416. 分割等和子集
题目:https://leetcode-cn.com/problems/partition-equal-subset-sum/写题过程:一开始想的是先排序,再从中间位置寻找两边是否相等,可是想了想,不行,很容易推翻,最后去看力扣题解学习了一波算法主体:这题是经典的NP 完全问题如果只有一个元素,直接返回fasle我们可以把问题转换为,寻找数组内是否有数据可以组成所有数据总和的一半。这样我们就可以转换为(0 - 1背包问题)如果sum总和为奇数,直接返回false如果数组最大值max_t &g原创 2020-10-15 20:05:05 · 123 阅读 · 0 评论 -
力扣学习笔记:116. 填充每个节点的下一个右侧节点指针
题目要求:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/算法:①这是一道模拟类型的题,跟着题目条件走就行②我运用了递归的思想③主体:我先判断root是否为空(因为下面会用到root->left等,如果root为空,就不能使用root->left会报错)。再对左右分情况讨论:首先左子树上结点的next一定等于root->right,问题不大;右子树上的结点就需要分析,首先,每一原创 2020-10-15 18:44:43 · 152 阅读 · 0 评论 -
检测大写字母(字符串)--力扣题解
题目给定一个单词,你需要判断单词的大写使用是否正确。我们定义,在以下情况时,单词的大写用法是正确的:全部字母都是大写,比如"USA"。单词中所有字母都不是大写,比如"leetcode"。如果单词不只含有一个字母,只有首字母大写, 比如 “Google”。否则,我们定义这个单词没有正确使用大写字母。示例 1:输入: “USA”输出: True示例 2:输入: “FlaG”输出...原创 2020-05-07 16:13:47 · 378 阅读 · 0 评论 -
除数博弈(动态规划)--力扣题解
题目爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作:选出任一 x,满足 0 < x < N 且 N % x == 0 。用 N - x 替换黑板上的数字 N 。如果玩家无法执行这些操作,就会输掉游戏。只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游...原创 2020-05-07 14:26:13 · 271 阅读 · 0 评论 -
带分数(全排列详解)
问题描述100 可以表示为带分数的形式:100 = 3 + 69258 / 714。还可以表示为:100 = 82 + 3546 / 197。注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。类似这样的带分数,100 有 11 种表示法。输入格式从标准输入读入一个正整数N (N<1000*1000)输出格式程序输出该数字用数码1~9不重复不遗漏地组成带分数表示的...原创 2020-05-10 18:50:15 · 983 阅读 · 0 评论 -
发现环--C语言
题目小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗...原创 2020-04-13 20:28:47 · 234 阅读 · 0 评论 -
对局匹配--C语言
题目小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。现在小明知道这个网站总共有N名用户,以及他们的积分分别是A1, A2, … AN。小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任...原创 2020-04-13 20:11:36 · 290 阅读 · 0 评论 -
分考场--C语言
题目n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式 第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a,b,用空格分开 (1<=a,b<=n) 表示第a个人与第b个人认识。输出格式 一行一...原创 2020-04-13 19:44:34 · 255 阅读 · 0 评论 -
数组重组找最小--C语言
题目:给定一个整数数组,请将其重新排序,以构造最小值。样例 2:输入:[3, 32, 321]输出:[321, 32, 3]解释:通过将数组重新排序,可构造 6 个可能性数字:3+32+321=3323213+321+32=33213232+3+321=32332132+321+3=323213321+3+32=321332321+32+3=321323其中,最小值为 321...原创 2020-02-05 20:24:01 · 353 阅读 · 0 评论 -
螺旋矩阵--C语言
题目:给定一个数n, 生成一个包含1~n2的螺旋形矩阵.(螺旋由外向内顺时针旋转, 可参照样例)样例 1:输入: 3输出:[[ 1, 2, 3 ],[ 8, 9, 4 ],[ 7, 6, 5 ]]解题思路:(主要)一圈一圈遍历矩阵。代码①边界处理。矩阵的上下左右边界。//边界处理 int shang, xia, zuo, you; shang = 0; xia ...原创 2020-02-05 20:14:31 · 648 阅读 · 0 评论 -
字母大小写排序--C语言
题目:给定一个只包含字母的字符串,按照先小写字母后大写字母的顺序进行排序。样例 1:输入: “abAcD”输出: “acbAD”解题思路:快速排序的延伸。左边,找大写字母。右边,找小写字母。在两边互换。 //ZiFu,保存字母的数组 int zuo, you; char temp; zuo = 0; you = num - 1; while (zuo <...原创 2020-02-05 20:05:11 · 7121 阅读 · 1 评论 -
全排列算法(详解)
/*递归函数思路:例:输入1 2 3。输出1-2-3。1-3-2。2-1-3。2-3-1。3-1-2。3-2-1。规律:有n个数的条件下,每个数都会在第一位(n-1)次。这里用一个for循环就行。再对他们后面数进行全排列。这就形成递归。*/#include<stdio.h>#include<stdlib.h>int input(int[]);/...原创 2020-01-19 21:54:44 · 2104 阅读 · 0 评论