算法
文章平均质量分 51
编程能力、算法、各大og平台题目
「已注销」
这个作者很懒,什么都没留下…
展开
-
【动态规划之dp数组的构建及滚动数组优化空间】——————最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:1 <= nums.length <= 105-104 <原创 2022-02-13 13:16:57 · 694 阅读 · 0 评论 -
【动态规划】——————跳跃游戏合集
跳跃游戏Ⅰ给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true 解释:可以先跳 1 步,从下标 0 到达下标 1,然后再从下标 1 跳 3步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 ,所以永远不可能到达最原创 2022-02-13 12:49:06 · 263 阅读 · 0 评论 -
【快慢指针】————删除链表倒数第N个结点
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]提示:链表中结点的数目为 sz1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz前言在对链表进行操作时原创 2022-02-12 23:10:13 · 206 阅读 · 0 评论 -
【双指针】———两数之和
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。你可以假设每个输入 只对应唯一的答案 ,而且原创 2022-02-10 16:24:33 · 1117 阅读 · 1 评论 -
【经典算法题解方法总结】
动态规划动态规划之dp数组关系构建动态规划之dp数组关系及边界条件的查找 打家截舍Ⅰ动态规划之dp数组关系及边界条件的查找 打家截舍Ⅱ动态规划之dp数组关系及边界条件的查找 打家截舍Ⅲ动态规划之滚动数组的运用介绍二分查找双指针...原创 2022-02-10 16:09:28 · 1938 阅读 · 0 评论 -
【动态规划之构造dp数组】———LeetCode740 删除并获得点数(打家截舍升级版)
给你一个整数数组 nums ,你可以对它进行一些操作。每次操作中,选择任意一个 nums[i] ,删除它并获得 nums[i] 的点数。之后,你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。示例 1:输入:nums = [3,4,2] 输出:6 解释: 删除 4 获得 4 个点数,因此 3 也被删除。 之后,删除 2 获得 2个点数。总共获得 6 个点数。示例 2:输入:nums = [2,2原创 2022-02-10 15:49:59 · 587 阅读 · 0 评论 -
【动态规划之dp数组关系的寻找及边界条件寻找】————LeetCode 213.打家截舍Ⅱ
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。给定一个代表每个房屋存放金额的非负整数数组,计算你 在不触动警报装置的情况下 ,今晚能够偷窃到的最高金额。示例 1:输入:nums = [2,3,2] 输出:3 解释:你不能先偷窃 1 号房屋(金额 = 2),然后偷窃 3 号房屋(金额 = 2),因为他们是相原创 2022-02-10 15:13:07 · 279 阅读 · 0 评论 -
【动态规划之练习dp数组的构成】———LeetCode 198.打家劫舍
方法一:动态规划首先考虑最简单的情况。如果只有一间房屋,则偷窃该房屋,可以偷窃到最高总金额。如果只有两间房屋,则由于两间房屋相邻,不能同时偷窃,只能偷窃其中的一间房屋,因此选择其中金额较高的房屋进行偷窃,可以偷窃到最高总金额。如果房屋数量大于两间,应该如何计算能够偷窃到的最高总金额呢?对于第 k (k>2)间房屋,有两个选项:偷窃第 k 间房屋,那么就不能偷窃第 k−1 间房屋,偷窃总金额为前 k−2 间房屋的最高总金额与第 kkk 间房屋的金额之和。不偷窃第 k 间房屋,偷窃总金额为前 k原创 2022-02-10 14:46:09 · 418 阅读 · 0 评论 -
【动态规划】————最小花费爬楼梯
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20] 输出:15 解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。 总花费为 15 。示例 2:输入:cost = [1,100,1,1,1,100,1,1,100,1] 输原创 2022-02-09 20:10:45 · 305 阅读 · 0 评论 -
【动态规划之滚动数组的运用】————爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶提示:1 <= n <= 45方法一:动态规划思路和算法我们用 f(x)f(x)f(x) 表示爬到第 xxx 级台阶的原创 2022-02-09 19:55:24 · 182 阅读 · 0 评论 -
【数组元素移动】————移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。void swap(int *a,int *b){ int temp = *a; *a = *b; *b = temp; }void moveZeroes(int* nums, int numsSize){ int left原创 2022-01-21 22:34:51 · 134 阅读 · 0 评论 -
【数组逆置】———关于调用函数的顺序问题
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。示例 1:输入: nums = [1,2,3,4,5,6,7], k = 3输出: [5,6,7,1,2,3,4]解释:向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]示例 2:输入:nums = [-1,-100,3,99], k = 2输出:[3,99,-1,-100]解释:向右轮转 1 步: [99,-1,-原创 2022-01-21 22:01:17 · 105 阅读 · 0 评论 -
【动态规划】——第 N 个泰波那契数
泰波那契数的边界条件是 T(0)=0,T(1)=1,T(2)=1T(0)=0, T(1)=1, T(2)=1T(0)=0,T(1)=1,T(2)=1。当 n>2n>2n>2 时,每一项的和都等于前三项的和,因此有如下递推关系:T(n)=T(n−1)+T(n−2)+T(n−3)T(n)=T(n-1)+T(n-2)+T(n-3) T(n)=T(n−1)+T(n−2)+T(n−3)由于泰波那契数存在递推关系,因此可以使用动态规划求解。动态规划的状态转移方程即为上述递推关系,边界条件为 T(0原创 2022-01-16 21:28:19 · 226 阅读 · 0 评论 -
数据结构综合应用题:Huffman数的应用
所选题目:哈夫曼树的应用题目描述:要传输一则报文内容如下: “AAAAAAAAAAAAAAABBBBBBBBBCCCCCCCCDDDDDDDDDDDDEEEEEEEEEEFFFFF” 请为这段报文设计哈夫曼编码,要求如下:请计算出每个字符出现的概率,并以概率为权重来构造哈夫曼树,写出构造过程、画出 最终的哈夫曼树,得到每个字符的哈夫曼编码。①计算每个字符出现的概率由报文内容分析知 共有A:15个 B:9个 C:8个 D:12个 E:10个 F:5个 共计59个字符 故每个字符出现的概率如下A:原创 2020-07-13 13:42:17 · 1426 阅读 · 2 评论 -
PTA 7-2 路径判断 (20分)
给定一个有N个顶点和E条边的无向图,请判断给定的两个顶点之间是否有路径存在。 假设顶点从0到N−1编号。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。最后一行给出两个顶点编号i,j(0≤i,j<N),i和j之间用空格分隔。输出格式:如果i和j之间存在路径,则输出"There is a path between i and j.",否则输出"There is no path betwe原创 2020-06-15 15:33:40 · 3867 阅读 · 1 评论 -
PTA 练习1002
PTA 1002 写出这个数 (20分)参考链接无意侵犯 纯粹用于学习分享源码:#include<iostream>using namespace std;void output(int a){ switch(a) { case 0:cout<<"ling";break; case 1:cout<<"yi";break; case 2:cout<<"er";b原创 2020-05-16 18:29:29 · 183 阅读 · 0 评论 -
PTA 1009 说反话 (20分)
1009 说反话 (20分)给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。输出格式:每个测试用例的输出占一行,输出倒序后的句子。输入样例:Hello World Here I Come输出样例:Come I Here World Hello#include&原创 2020-05-30 15:25:48 · 173 阅读 · 0 评论 -
PTA 1008 数组元素循环右移问题 (20分)
一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0 A ⋯AN−1)变换为(A N−M ⋯A N−1 A 0 A 1 ⋯A N−M−1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。输出格式:在一行中输出循环右移M位以后原创 2020-05-29 22:07:54 · 127 阅读 · 0 评论 -
PTA 练习1003 我要通过!
1003 我要通过! (20分)写的比较繁琐,再来梳理一下思路源码:#include<iostream>using namespace std;int main(){ int i; int a[10]; cin>>i; getchar(); for(int m=0;m<i;m++) { int left=0; int medium=0; int right=0; int原创 2020-05-17 13:03:33 · 206 阅读 · 0 评论 -
7-2 括号匹配 (11分)
7-2 括号匹配 (11分)给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20)输出样例1:yes输入样例2:{[}]输出样例2:no#include<iostream>using namespace std原创 2020-06-01 23:41:32 · 2403 阅读 · 0 评论