
Algorithm
平日算法题解、积累
辰九九
一以贯之的努力,不得懈怠的人生。
展开
-
LeetCode-1049. 最后一块石头的重量 II-JS版本
1.题目原题地址https://leetcode-cn.com/problems/last-stone-weight-ii/有一堆石头,用整数数组stones 表示。其中stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x...原创 2022-04-17 16:28:56 · 133 阅读 · 0 评论 -
leetcode-416. 分割等和子集JS版本
1.题目题目原地址https://leetcode-cn.com/problems/partition-equal-subset-sum/给你一个 只包含正整数 的 非空 数组nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元.原创 2022-04-17 15:37:56 · 406 阅读 · 0 评论 -
96. 不同的二叉搜索树(JS动规)
题目描述给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。示例 1:输入:n = 3输出:5示例 2:输入:n = 1输出:1提示:1 <= n <= 19参考代码var numTrees = function(n) { let dp=Array(n+1).fill(0); dp[0]=1; for(let i=1;i<=n;i++原创 2022-04-11 08:10:40 · 1205 阅读 · 0 评论 -
201809-2 试题名称: 买菜 C++
样例输入41 35 69 1314 152 45 710 1113 14样例输出3第一回合只有90分,只要是相交的时间段,都做一个标记记为`w[i]找时间补上(T_T)#include<iostream>#include<algorithm>using namespace std;#define MAX_N 1000005int w[1000005]={0};int main(){ int n; cin>>.原创 2021-09-19 10:58:19 · 217 阅读 · 0 评论 -
201909-2 试题名称: 小明种苹果(续)C++
【样例1输入】44 74 -7 -12 -55 73 -8 -6 59 -45 76 -5 -10 60 -25 80 -6 -15 59 0【样例1输出】222 1 0【样例⒉输入】54 10 0 9 04 10 -2 7 02 10 04 10 -3 5 04 10 -1 8 0【样例2输出】39 4 2第一回合只算了t,只有20分#include<iostream>#include<algorithm>using names原创 2021-09-18 16:12:55 · 158 阅读 · 0 评论 -
202006-2 试题名称: 稀疏向量 C++
【样例输入】10 3 44 57-310 11 104 205 307 40【样例输出】-20第一回合#include<iostream>#include<algorithm>#include<vector>using namespace std;int n,a,b;long long ans=0;vector<pair<int,int> > u,v;int main(){ cin>&g.原创 2021-09-18 14:48:41 · 198 阅读 · 0 评论 -
201912-2 试题名称: 回收站选址 C++
【样例1输入】71 22 10 01 11 02 00 1【样例1输出】00100【样例2输入】20 0-100000 10【样例2输出】00000【样例3输入】119 1010 1011 1012 1013 1011 911 812 910 910 1112 11【样例3输出】02100第一回合#include<iostream>#include<algorithm>#inc.原创 2021-09-18 10:36:21 · 134 阅读 · 0 评论 -
202009-2 试题名称: 风险人群筛查 C++
样例输入15 2 6 20 40 100 80100 80 100 80 100 80 100 80 100 80 100 8060 50 60 46 60 42 60 38 60 34 60 3010 60 14 62 18 66 22 74 26 86 30 10090 31 94 35 98 39 102 43 106 47 110 510 20 4 20 8 20 12 20 16 20 20 20样例输出132样例输入21 3 8 0 0 10 10-1 -1 0 0 .原创 2021-09-13 10:04:10 · 287 阅读 · 0 评论 -
202104-2 试题名称: 邻域均值 C++
问题分析样例输入4 16 1 60 1 2 34 5 6 78 9 10 1112 13 14 15Data样例输出7Data样例输入11 8 2 20 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 00 7 0 0 0 7 0 0 7 7 07 0 7 0 7 0 7 0 7 0 77 0 0 0 7 0 0 0 7 0 77 0 0 0 0 7 0 0 7 7 07 0 0 0 0 0 7 0 7 0 07 0 7 0 7 0 7原创 2021-09-13 08:52:54 · 418 阅读 · 0 评论 -
201709-1 试题名称: 打酱油 C++
样例输入40样例输出5样例输入80样例输出11第一回合:30分不是小明打酱油,我才是来打酱油的#include<iostream>#include<algorithm>using namespace std;int main(){ int n; int ans=0; cin >> n; int a = n / 10; ans = a + a / 3; ans += a / 5; cout<<ans; retur.原创 2021-09-07 09:27:19 · 166 阅读 · 0 评论 -
201703-1 试题名称: 分蛋糕 C++
样例输入6 92 6 5 6 3 5样例输出3思路:就是将数组元素相加和k作比较,一开始我困惑的地方就是如何计算数组元素之和和k比较,而且还要做好标记。其实我们完全可以用b=k来减去数组元素,每次分给一个人蛋糕的时候再重置一下b就可以解决问题了#include<iostream>#include<algorithm>using namespace std;int main(){ int n,k,i,j; int a[1003]; cin >&.原创 2021-09-06 08:23:57 · 462 阅读 · 0 评论 -
201503-1 试题名称: 图像旋转 C++
样例输入2 31 5 33 2 4样例输出3 45 21 3#include<iostream>#include<algorithm>using namespace std; int a[1002][1002];int main(){ int n,m; cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j];.原创 2021-08-31 18:55:00 · 137 阅读 · 0 评论 -
201312-1 试题名称: 出现次数最多的数 C++
问题分析样例输入610 1 10 20 30 20样例输出10第一回合#include<iostream>#include<algorithm>using namespace std;int main(){ int n; int a; int i; int ans[10001]={0},l=-1; cin>>n; for(i=0;i<n;i++){ cin>>a; if(a>l){ l=a;//原创 2021-08-28 14:31:04 · 166 阅读 · 0 评论 -
201903-1 试题名称: 小中大 C++
问题分析样例一:输入:3-1 2 4输出:4 2 -1 样例二:输入:4-2 -1 3 4输出:4 1 -2第一回合:又是80#include<iostream>#include<algorithm>using namespace std;int n;const long long COUNT=3000000;int arr[COUNT];int f(int *arr,int n){ if(n%2){ return arr原创 2021-08-27 14:07:42 · 283 阅读 · 0 评论 -
201909-1 小明种苹果 C++
问题分析样例13 373 -8 -6 -4 76 -5 -10 -880 -6 -15 0输出167 2 23样例2:2 210 -3 -115 -4 0输出17 1 4第一回合:#include<iostream>#include<algorithm>#include<cmath>using namespace std;bool cmp1(pair<int,int>a,pair<int,int>b原创 2021-08-26 10:15:33 · 165 阅读 · 2 评论 -
201912-1 CCF认证 报数
问题分析第一回合:只有40分#include<iostream>#include<algorithm>using namespace std;int n;int f1(int m){ if(m%7==0||m==7){ return true; } return false;}int f2(int m){ int n=m; while(m){ m=m%10; if(m==7){ return true; } m=m/10; }原创 2021-08-25 08:48:39 · 112 阅读 · 0 评论 -
202006-1 CCF 线性分类器
问题分析样例:9 31 1 A1 0 A1 -1 A2 2 B2 3 B0 1 A3 1 B1 3 B2 0 A0 2 -3 -3 0 2 -3 1 1 PS:注意直线的点代入计算的顺序,不同的表达是计算的结果是不同的。 思路:将每个点代入直线表达式进行计算,然后利用标志将其分类。第一回合(错误):原因是超时。#include<iostream>#include<algorithm>using namespace std;str原创 2021-08-24 09:21:39 · 149 阅读 · 0 评论 -
202009-1 称检测点查询 C++
问题分析第一版(错误)!!!!对知识掌握不熟练,换一种方法再来。#include<iostream>#include<algorithm>#include<cmath>using namespace std;int main(){ int n,x,y; cin>>n>>x>>y; int ans[300]; int index[300]; for(int i=0;i<n;i++){ int a原创 2021-08-23 08:23:58 · 337 阅读 · 0 评论 -
CCF认证 202012-1 期末预测之安全指数
问题分析#include<iostream>#include<cmath> #include<algorithm>using namespace std;int n;int w,score; int main(){ cin>>n; int y=0,ans=0; for(int i=0;i<n;i++){ cin>>w>>score; y+=(w*score); }// cout<<原创 2021-08-22 09:17:38 · 121 阅读 · 0 评论 -
CCF 灰度直方图
问题分析2021年4月份的第一题,5道题中最简单的一道题。一般暴力就可过。思路:CCF第一题一般不难,有时候就是文字多太绕,把文字读透了问题就就解决了一大半。我们不难发现,其实就是计算L之内的正整数在方阵中的出现次数。第一次的思路就是将二维数组转换为一位数组,然后和L以内的数字进行比较,结果存在结果数组。提交只有40分。第二次: 转变策略,直接输入数字时存在一个变量马上与L以内正整数作比较,使用ans数组存起来。代码如下:#include<iostream>#incl原创 2021-08-21 21:06:25 · 439 阅读 · 0 评论 -
Python求方阵鞍点
问题分析一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。(题目保证给出的矩阵是方阵,且至多存在一个鞍点)问题解决先求每一行的最大值,然后再求每一列的最小值。有个问题:怎么求每一列的最小值呢?利用所求得的最大值的下标去遍历每一行的中的每一列相同下标的元素,自然就找到每一列了。def get_andian(n): m=0 juzhen=[] while m<n: row=list(map(int,input("按行输入,空格隔原创 2021-07-08 14:22:06 · 1555 阅读 · 0 评论 -
统计利用先序遍历创建的二叉树的深度
题目描述利用先序递归遍历算法创建二叉树并计算该二叉树的深度。先序递归遍历建立二叉树的方法为:按照先序递归遍历的思想将对二叉树结点的抽象访问具体化为根据接收的数据决定是否产生该结点从而实现创建该二叉树的二叉链表存储结构。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后再统计创建完成的二叉树的深度(使用二叉树的后序遍历算法)。需要注意输入数据...原创 2020-03-22 17:33:05 · 943 阅读 · 0 评论 -
输出利用先序遍历创建的二叉树中的指定结点的孩子结点
题目描述利用先序递归遍历算法创建二叉树并输出该二叉树中指定结点的儿子结点。约定二叉树结点数据为单个大写英文字符。当接收的数据是字符"#“时表示该结点不需要创建,否则创建该结点。最后再输出创建完成的二叉树中的指定结点的儿子结点。注意输入数据序列中的”#“字符和非”#"字符的序列及个数关系,这会最终决定创建的二叉树的形态。输入输入用例分2行输入,第一行接受键盘输入的由大写英文字符和"#"字符构成的一个字符串(用于创建对应的二叉树),第二行为指定的结点数据。输出用一行输出该用例对应的二叉树中指定结点的儿原创 2020-06-09 09:50:15 · 963 阅读 · 0 评论 -
LeetCode:7. 整数反转(C++)
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 −1]。请根据这个假设,如果反转后整数溢出那么就返回 0。class Solution {public: int reverse(int x) { long n=0;原创 2020-12-07 14:22:52 · 286 阅读 · 0 评论 -
插入排序算法的实现(由低到高排序)
题目描述插入排序算法实现。输入第一行是待排序数据元素的个数;第二行是待排序的数据元素。输出一趟直接插入排序算法结果。样例输入1050 36 41 19 23 4 20 18 12 22样例输出36 50 41 19 23 4 20 18 12 22插入排序:顺序地将数据元素按照关键字的大小插入到已排序的元素子集合当中(子集合从只有一个数据元素开始)通俗来说,就是后一位和前一位比较,如果小了,那么就和前一位元素交换位置,这是,我们就完成了一趟排序这道题就是考察插入排序算法的应用,原创 2020-06-09 09:38:30 · 487 阅读 · 0 评论 -
约瑟夫问题的实现
输入士兵的个数以及需要报的号分别为n,k; 从一依次报数,若是报到k的士兵,则退出队伍,若是没有,则继续依次循环下去,直到队伍剩下最后一个人,要求是输出最后一个人的编号,无其他多于输入。这里运用队列的方法来解决问题,将士兵的编号依次进队,在队列中人数不为一的情况下,判断是否与k值相同,若相同,则出队,再继续进行操作。#include<iostream>#include<bi...原创 2020-03-26 17:21:53 · 346 阅读 · 0 评论 -
860. 柠檬水找零C++
在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。示例 1:输入:[5,5,5,10,20] 输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。第 4原创 2020-12-10 18:06:48 · 183 阅读 · 1 评论 -
ASL、AVL 知识学习
ASL是查找算法的查找成功时的平均查找长度的缩写,是为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值。P(i)=查找表中第i个记录的概率C(i)=关键字与给定值相等的第i个记录时,和给定值 进行过比较的关键字个数。ASL(Average Search Length),即平均查找长度,在查找运算中,由于所费时间在关键字的比较上,所以把平均需要和待查找值比较的关键字次数称为平...原创 2020-04-14 18:19:11 · 2006 阅读 · 0 评论 -
LeetCode之26. 删除排序数组中的重复项
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度 5, 并且原数原创 2020-12-13 19:32:47 · 95 阅读 · 0 评论 -
LeetCode 存在重复元素之JavaScript
给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true想法:一开始想的是最原始的做法,桶排序相似,将每个元素放在桶里面,最后直接去查看是否有两个元素挤在了一个桶里面,有 则输出true【注意题目要求呀!!至少原创 2020-12-13 09:27:58 · 177 阅读 · 0 评论 -
变位词(字符串排序实现)
342: 变位词题目描述如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词。如tea 与eat , nic与cin, ddc与dcd, abc与abc 等。你的任务就是判断它们是否是变位词。 输入第一行一个N,表示下面有N行测试数据。每行测试数据包括两个单词,如tea eat ,它们之间用空格割开输出对于每个测试数据,如果它们是变位词,输出Yes,否则输出No.样例输入3 tea eat ddc cdd dee dde样例输出原创 2020-11-03 20:48:21 · 632 阅读 · 0 评论 -
LeetCode之38. 外观数列
给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:111211211111221第一项是数字 1描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 “11”描述前一原创 2020-12-14 15:10:08 · 115 阅读 · 0 评论 -
洛谷 P1002 过河卒
题目描述棋盘上 AAA 点有一个过河卒,需要走到目标 BBB 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 CCC 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AAA 点 (0,0)(0, 0)(0,0)、BBB 点 (n,m)(n, m)(n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从 AAA 点能够...原创 2020-03-24 20:54:21 · 241 阅读 · 0 评论 -
洛谷 P1152 欢乐的跳
题目描述一个nnn个元素的整数数组,如果数组两个连续元素之间差的绝对值包括了[1,n−1][1,n-1][1,n−1]之间的所有整数,则称之符合“欢乐的跳”,如数组14231 4 2 31423符合“欢乐的跳”,因为差的绝对值分别为:3,2,13,2,13,2,1。给定一个数组,你的任务是判断该数组是否符合“欢乐的跳”。输入格式每组测试数据第一行以一个整数n(1≤n≤1000)n(1 \l...原创 2020-03-31 09:52:23 · 831 阅读 · 0 评论 -
洛谷 P1177 【模板】快速排序
题目描述利用快速排序算法将读入的 NNN 个数从小到大排序后输出。快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)输入格式第 111 行为一个正整数 NNN,第 222 行包含 NNN 个空格隔开的正整数 aia...原创 2020-03-29 10:03:51 · 255 阅读 · 0 评论