数据结构与算法
wxl1999
这个作者很懒,什么都没留下…
展开
-
并查集总结
并查集详解:http://blog.csdn.net/dellaserss/article/details/7724401模板:#include <stdio.h>#include <vector>#include <algorithm>using namespace std;//并查集struct DisjointSet { std::...原创 2018-07-30 19:42:38 · 109 阅读 · 0 评论 -
LeetCode-20 有效的括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “...原创 2019-07-29 09:39:26 · 70 阅读 · 0 评论 -
Leetcode-21 合并两个有序链表
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解答也是学数据结构时的必做题,这种写法还是很值得借鉴的while(h1 && h2) {...}p->next = h1 =...原创 2019-07-29 09:43:56 · 94 阅读 · 0 评论 -
LeetCode-26 删除排序数组中的重复项
题目给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nu...原创 2019-07-29 09:47:12 · 82 阅读 · 0 评论 -
LeetCod-27 移除元素
题目给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元...原创 2019-07-29 09:53:39 · 121 阅读 · 0 评论 -
LeetCode-28 实现strStr()
题目实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “...原创 2019-07-29 10:00:45 · 81 阅读 · 0 评论 -
LeetCode-35 搜索插入位置
题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0解答典...原创 2019-07-29 10:40:13 · 68 阅读 · 0 评论 -
LeetCode-38 报数
题目报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1112112111112211 被读作 “one 1” (“一个一”) , 即 11。11 被读作 “two 1s” (“两个一”), 即 21。21 被读作 “one 2”, “one 1” (“一个二” , “一个一”) , 即 1211。给定一...原创 2019-07-29 10:42:20 · 77 阅读 · 0 评论 -
LeetCode-37 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解答动态规划经典题贴一个参考吧https://leetcode-cn.com/problems/maximum-subarray/soluti...原创 2019-07-29 10:47:05 · 95 阅读 · 0 评论 -
LeetCode-58 最后一个单词的长度
题目给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: “Hello World”输出: 5解答既然是最后一个单词,不妨从末尾开始往前找。单词必然介于两堆空格之间,用标志位加以区分即可。class Solution {public: in...原创 2019-07-29 10:50:36 · 137 阅读 · 0 评论 -
LeetCode-66 加一
题目给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表示数字 4321。解答...原创 2019-07-29 10:59:09 · 125 阅读 · 0 评论 -
LeetCode-67 二进制求和
题目给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = “11”, b = “1”输出: “100”示例 2:输入: a = “1010”, b = “1011”输出: “10101”解法一这个有点难想到,先将两个二进制的字符串用0将长度补齐,然后直接模拟手算加法,从末尾开始,首位单独处理一下。class ...原创 2019-07-29 11:31:30 · 159 阅读 · 0 评论 -
LeetCoe-69 x 的平方根
题目实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,由于返回类型是整数,小数部分将被舍去。解法一用的是牛顿法,具体推导见https://leetcode-cn.co...原创 2019-07-29 11:43:42 · 165 阅读 · 0 评论 -
LeetCode-155 最小栈
题目设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(...原创 2019-08-04 15:58:36 · 146 阅读 · 0 评论 -
LeetCode-1 两数之和
两数之和题目解法一 暴力枚举解法二 哈希表题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。解法一 暴力枚举没什么好说的,两层循环即可class Solution {public: vector<int> t...原创 2019-07-27 17:56:23 · 88 阅读 · 0 评论 -
LeetCode-7 整数反转
题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。解答方法是很常见的先取模后作除,但是在循环的过程中做乘法时,可能会溢出!这里直接搬运了灵魂画师牧码的题解:溢出条件有两个,一个是大于整数最大值MAX_VALUE,另一个是小于整数最小值MIN_VALUE,设当前计算结果为ans,下一位为pop。从ans * 10 + pop > MAX_VALUE这...原创 2019-07-27 18:05:06 · 74 阅读 · 0 评论 -
LeetCode-9 回文数
回文数题目解法一解法二题目判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它...原创 2019-07-28 09:53:57 · 74 阅读 · 0 评论 -
LeetCode-13 罗马数字转整数
罗马数字转整数题目解答题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 ...原创 2019-07-28 10:06:05 · 94 阅读 · 0 评论 -
基本的递归范式 以全排列与八皇后为例
基本的递归范式在当前位置遍历每一种可能,如果可行的话,标记这种可能已被使用,递归求取之后的位置,这种可能之后的所有情况遍历完返回时,再将这种可能的标记去掉,使得后续遍历求取之后的位置时,能够考察(看完例子之后再返回来看看)看两个例子:全排列#include <cstdio>const int maxn = 15;bool HashTable[maxn] = {0};...原创 2019-04-03 19:43:54 · 242 阅读 · 0 评论 -
PAT 1048 Find Coins
题目题目链接方法一 二分查找#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1e5 + 5;int coin[maxn];int main(){ int n, m; scanf("%d%d", &n, &m);...原创 2019-04-03 19:01:42 · 93 阅读 · 0 评论 -
排列(1833)
Description题目描述: 大家知道,给出正整数n,则1到n这n个数可以构成n!种排列,把这些排列按照从小到大的顺序(字典顺序)列出,如n=3时,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1六个排列。 任务描述: 给出某个排列,求出这个排列的下k个排列,如果遇到最后一个排列,则下1排列为第1个排列,即排列1 2 3…n。 比如:n = 3,k=2 给...原创 2018-03-16 21:26:45 · 381 阅读 · 0 评论 -
显示器
Description 你的一个朋友买了一台电脑。他以前只用过计算器,因为电脑的显示器上显示的数字的样子和计算器是不一样,所以当他使用电脑的时候会比较郁闷。为了帮助他,你决定写一个程序把在电脑上的数字显示得像计算器上一样。 Input输入包括若干行,每行表示一个要显示的数。每行有两个整数s和n (1 <= s <= 10, 0 <= n <= 99999...原创 2018-03-15 15:02:56 · 491 阅读 · 0 评论 -
约瑟夫问题
Description约瑟夫问题:有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。Input每行是用空格分开的两个整数,第一个是 n, 第二个是 m ( 0 < m,n <=300)。最后一行是...原创 2018-03-14 14:15:02 · 4764 阅读 · 0 评论 -
Packets(1017)
DescriptionA factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These products are always delivered to customers in the square par...原创 2018-03-13 14:48:07 · 171 阅读 · 0 评论 -
滑雪(1088)
DescriptionMichael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 516 17 18 19 615 24 25 20 714 23...原创 2018-03-11 19:06:12 · 152 阅读 · 0 评论 -
数塔
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的: 有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 已经告诉你了,这是个DP的题目,你能AC吗?Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表...原创 2018-03-11 14:08:56 · 1018 阅读 · 0 评论 -
单词数
Problem Descriptionlily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数。下面你的任务是帮助xiaoou333解决这个问题。 Input有多组数据,每组一行,每组就是一篇小文章。每篇小文章都是由小写字母和空格组成,没有标点符号,遇到#时表示输入结束。 Output每组只输出一个整数,其单独成行,该整...原创 2018-03-04 11:49:13 · 1190 阅读 · 1 评论 -
第十周作业——病人排队
Description病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序: 1. 老年人(年龄 >= 60岁)比非老年人优先看病。 2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。 3. 非老年人按登记的先后顺序看病。Input第1行,输入一个小于100的正整数,表示病人的个数;后面按照病人登记的先后顺序,每行输入一个病人的信息,...原创 2018-02-25 11:12:42 · 832 阅读 · 0 评论 -
第十周作业——成绩排序
Description给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。Input第一行为n (0 < n < 20),表示班里的学生数目;接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开。名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数。Output把成绩单按分数从高到低的顺序进行...原创 2018-02-25 10:11:08 · 721 阅读 · 0 评论 -
第六周作业——Pell数列
DescriptionPell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2, ... , an = 2 * an − 1 + an - 2 (n > 2)。给出一个正整数k,要求Pell数列的第k项模上32767是多少。Input第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数k (1 ≤ k < 10000...原创 2018-02-24 10:18:05 · 421 阅读 · 0 评论 -
第四周作业——求特殊自然数
Description一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。Input无。Output三行:第一行是此自然数的十进制表示;第二行是此自然数的七进制表示;第三行是此自然数的九进制表示。Sample Input(无) Sample Output(不提供) ...原创 2018-02-23 15:39:50 · 581 阅读 · 3 评论 -
第四周作业——数字反转
Description给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。Input输入共 1 行,一个整数N。-1,000,000,000 ≤ N≤ 1,000,000,000。Output输出共 1 行,一个整数,表示反转后的新数。Sample Input样...原创 2018-02-23 15:17:16 · 145 阅读 · 0 评论 -
第四周作业——角谷猜想
Description所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。 程序要求输入一个整数,将经过处理得到1的过程输出来。Input一个正整数N(N <= 2,000,000)Output从输入整数到1的步骤,每一步为一行,每...原创 2018-02-23 14:33:41 · 1283 阅读 · 0 评论 -
第三周作业——求一元二次方程的根
Description利用公式x1 = (-b + sqrt(b*b-4*a*c))/(2*a), x2 = (-b - sqrt(b*b-4*a*c))/(2*a)求一元二次方程ax2+ bx + c =0的根,其中a不等于0。Input输入一行,包含三个浮点数a, b, c(它们之间以一个空格分开),分别表示方程ax2 + bx + c =0的系数。Output输出一行,表...原创 2018-02-23 11:10:08 · 5179 阅读 · 1 评论 -
第三周讲义——闰年判断
例题:请写一个程序,该程序输入一个年份,根据该年份是否是建国整十周年、建党整十周年以及是否是闰年给出不同的输出。#include <iostream> using namespace std;int main(){ int year; scanf("%d",& year); if( year <= 0) printf("Illegal yea...原创 2018-02-23 10:29:01 · 904 阅读 · 0 评论 -
PAT 1033 To Fill or Not to Fill
题目链接把终点视为单位油价为0,里起点距离为D的加油站,起哨兵作用假设当前所处加油站编号为now, 接下来从满油状态下能到达的所有加油站中选出下一个前往的加油站:可以找到油价比当前加油站低的,加恰好能到达该加油站的油找不到比当前低的,去最低的。先在当前加油站加满找不到加油站,则最远能到达的距离即为当前加油站距离,加上满油到达的最远距离#include <cstdi...原创 2019-04-04 20:16:22 · 72 阅读 · 0 评论 -
PAT 1005 继续(3n+1)猜想
题目卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程中遇到的每一个数。例如对 n=3 进行验证的时候,我们需要计算 3、5、8、4、2、1,则当我们对 n=5、8、4、2 进行验证的时候,就可以直接判定卡拉兹猜想的真伪,而不需要重复计算,因为这 4 个数已经在验证3的时候遇到过了,我们称 ...原创 2019-04-02 19:41:00 · 64 阅读 · 0 评论 -
Leetcode-14 最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。解答从前往后枚举字符串的每一列,先比较每个字符串相同...原创 2019-07-28 20:22:53 · 79 阅读 · 0 评论