
算法
文章平均质量分 51
。
Rabbit Coder
学习知识的同时也要多输出,写作就是一个不错的输出方式, www.wzhongy.club
展开
-
T292114 [传智杯 #5 练习赛] 清洁工
你在这个 n×n 的范围内移动,你的移动轨迹可以描述为一个由 {N,S,W,E} 组成的字符串,每个字母分别表示上、下、左、右。可以假象一下,数组下标对应坐标系的第四象限,然后把这第四象限的数据,向上旋转90度到了第一象限,便是最终输出的形式,因此这个过程中需要考虑上下左右对应的不是真正的上下左右,应该是“右左上下”,自己体会2333。模拟过程,使用一个时间数组记录每个格子对应的时间,根据时间加上每次对应的灰尘数,最后输出注意一下,程序实现时用的数组下标,输出时对应的是坐标系下标,原创 2022-11-20 21:38:15 · 457 阅读 · 0 评论 -
T292113 [传智杯 #5 练习赛] 平等的交易
当然,你可以拿你手中的道具换取其他的道具,只是这些商道具的价值之和,不能超过你打算交换出去的道具。道具的价值可能是 0,但是你不能使用空集换取价值为 0 的商品。这题思路很简单,就是想让你先拿你的钱,必须买一件,之后用这一件尽可能多的去换别的物品。这题当时做的时候真没读懂,整的跟阅读理解似的2333,个人感觉这题出的不好。用贪心思想尽可能的让第一件的价格最大,之后从小到大遍历数组,求价值和与w比较,并记录个数。你有 n 件道具可以买,其中第 i件的价格为 ai。请问,在这个条件下,最多可以换取多少件道具?原创 2022-11-20 12:07:57 · 372 阅读 · 3 评论 -
leetcode周赛第二题6230. 长度为 K 子数组中的最大和
然后每滑动一下,把新元素加到hashmap中,当前窗口的最左端的元素,删掉,每次一增一删的同时,判断一下当前的元素个数是不是k个,如果是k个说明满足题目要求,把它和结果求一下最大值,以此类推。当时做的时候卡壳了,不知道怎么应对重复这个限制,想着用set,试了一下又卡住了23333,之后看了一下大佬题解,才知道用hash表。输入:nums = [1,5,4,2,9,9,9], k = 3。输入:nums = [4,4,4], k = 3。子数组 是数组中一段连续非空的元素序列。子数组的长度是 k,且。原创 2022-11-06 18:41:10 · 546 阅读 · 0 评论 -
习题3-4 周期串(算法竞赛入门经典第2版)
题目描述:如果一个字符可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例如,abcabcabcabc以3为周期,注意,它也以6和12为周期输入一个长度不超过80的字符串,输出其最小周期。思路:假设它的周期是1、2、3…80 依次循环,在第二重循环中判断当前周期内的串是否等于下一个周期内的串,如图:上代码:#include"iostream"using namespace std;int main(){ string s; cin >> s; for(int原创 2020-09-13 20:18:25 · 483 阅读 · 0 评论 -
模拟题-Z字型扫描
题目:在图像编码的算法中,需要将一个给定的方形矩阵进行 Z 字形扫描(Zigzag Scan)。给定一个 n×n 的矩阵,Z 字形扫描的过程如下图所示:对于下面的 4×4 的矩阵,1 5 3 93 7 5 69 4 6 47 3 1 3对其进行 Z 字形扫描后得到长度为 16 的序列:1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3。请实现一个 Z 字形扫描的程序,给定一个 n×n 的矩阵,输出对这个矩阵进行 Z 字形扫描的结果。输入格式输入的第一行包含一个整数 n,表原创 2021-02-16 21:54:10 · 323 阅读 · 0 评论 -
广度优先搜索算法及常用操作和模板
广度搜索算法理解可以想象成一张方格纸,在其中一个方格上画一个点,之后这个点可以向四周或是四面八方走(一般都是上下左右),再之后,在第一步基础上走出来的每一个点,同样可以看成是一个新的起点,并再次进行相同的操作,向四周扩散。举个例子:一个表格中开始只有一个点之后向四周扩散最终会成为这样通过图例不难看出,bfs很适合求解一些最短路问题(权值相同的情况下)直接上板子:void bfs(int sx, int sy) { // (sx, sy) 为搜索的起点 queue<poi原创 2021-02-21 22:12:05 · 494 阅读 · 0 评论 -
n皇后问题的三个模板
题目:n-皇后问题是指将 n 个皇后放在 n∗n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数n。输出格式每个解决方案占n行,每行输出一个长度为n的字符串,用来表示完整的棋盘状态。其中”.”表示某一个位置的方格状态为空,”Q”表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。输出方案的顺序任意,只要不重复且没有遗漏即可。原创 2021-02-20 22:19:27 · 264 阅读 · 0 评论 -
全排列的两种写法
题目:给定一个整数n,将数字1~n排成一排,将会有很多种排列方法。现在,请你按照字典序将所有的排列方法输出。输入格式共一行,包含一个整数n。输出格式按字典序输出所有排列方案,每个方案占一行。数据范围1≤n≤7输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1思路:这是一道基础的dfs+回溯,一层一层递归代码:#include<iostream>using namespace std;const int N = 10;原创 2021-02-17 21:38:25 · 454 阅读 · 0 评论 -
LeetCode302场周赛第三题--裁剪数字后查询第 K 小的数字
再给你一个下标从0开始的二维整数数组queries,其中queries[i]=[ki,trimi]。输入nums=[“102”,“473”,“251”,“814”],queries=[[1,1],[2,3],[4,2],[1,2]]输入nums=[“24”,“37”,“96”,“04”],queries=[[2,1],[2,2]]这里说的下标就是最原始的值的下标,每通过一次基数排序它们的值的顺序是会变化的,该题的实质就是求基数排序第i次的第k小的数值的下标,...原创 2022-07-25 15:41:45 · 467 阅读 · 0 评论 -
LeetCode每日一题--有序队列(整理最小表示法)
k >= 2时,可以生成任意的字符串,比如a1 b1 S(S表示多个字符),如果交换a1 b1的位置,可以先a1 S b1, 之后 S b1 a1,最后 b1 a1 S,以此类推,任何相邻的两个字符都是可以交换的,从而任意顺序的字符串都可以有,故k>=2的情况下,直接用sort()函数排序即可。2.如果s[i+k] > s[j+k] i = i + k + 1,即最小表示不可能以s[i->i+k]开头。1.如果s[i+k]==s[j+k] k++输入:s = “baaca”, k = 3。...原创 2022-08-03 19:26:00 · 401 阅读 · 0 评论 -
LeetCode206场周赛第二题--早餐组合整理
这是我第二次刷力扣,又是只做了一道题23333,加油吧,一点一点积累、一点一点进步!题目描述:小扣在秋日市集选择了一家早餐摊位,一维整型数组 staple 中记录了每种主食的价格,一维整型数组 drinks 中记录了每种饮料的价格。小扣的计划选择一份主食和一款饮料,且花费不超过 x 元。请返回小扣共有多少种购买方案。注意:答案需要以 1e9 + 7 (1000000007) 为底取模,如:计算初始结果为:1000000008,请返回 1示例 1:输入:staple = [10,20,5], dri原创 2020-09-12 20:16:29 · 628 阅读 · 0 评论 -
排序系列之冒泡排序三种形式
希望大家用心去读,内容不多,相信会对你有帮助最原始冒泡说明:一数组的乱序数列,两两相比较,大的放右边,每一轮比较将最大的一个数确定在数组尾部,并且每一轮比较后总的比较次数减一,依次循环。举个栗子:第一轮确定第一个最大的再确定第二个最大的再确定第三、第四。。。个最大的上模板:for(int end = array.length - 1;end > 0;end --){ // array.length数组长度 for(int begin = 1;begin <= end;beg原创 2020-08-22 14:54:34 · 323 阅读 · 0 评论 -
排序系列之插入排序的两种思想
交换思想类似于玩扑克牌时,对新拿到的扑克进行对应位置的插入,相对小的放在左边,大的放在右边;大体思想就相当于以第一张牌为基础,后面的数值依次与第一张进行比较,比它小的和它交换位置,比他大的不用动(除此之外还有一个小的限制条件,每次若满足右边的小于左边的,就进行交换)举例:以6 3 2 9 8为例,如图这里注意,2比6小左移,2比3还小继续左移;8比6大,按说应该不动,但是8小于与它相邻的左边的元素,则继续左移,直至不小于其左边的元素为止,停止移动看代码:for(int begin =原创 2020-08-22 16:59:33 · 1751 阅读 · 1 评论 -
排序系列之选择排序及稳定性分析
选择排序思想:在一个乱序的数组中,每循环一轮数组的元素,找到一个最大的元素,放到数组尾部,并且排除刚找到的最大的,继续对前面的其他元素进行分析,每一轮都找它们的最大值每一次让数组中的最大值和end值交换,end依次减小上模板:for(int end = array.length-1;end > 0;end --){ int max = -1000000; for(int begin = 1;begin <= end;begin ++){ if(max < begin){原创 2020-08-22 15:37:31 · 783 阅读 · 0 评论 -
动态规划一般题型的解题思路
动态规划类似于分治,分治可以说就是暴力求解,动态规划再次基础上算是做了一次优化,从性能上讲,同样一道题目,分治的解法要比动态规划的解法效率低,并且,分治的思路是自顶向下的,而动态规划的思路是从下到上的。对于一个题目而言,应用动态规划往往有两个思路,即可以正向思考,也可以逆向思考,暂时不上图了,时间有点晚了。想象一下,如果正着推,从头推到尾,如果中间一个位置改变了,则它后面的信息都要重新更新。但是如果逆着推,当前面的位置的某个信息发生改变时,并不影响后面的变化,因为是逆着推的。因此,在动规中,逆推更常用。原创 2022-10-23 23:05:45 · 409 阅读 · 0 评论 -
王道数据结构--顺序表代码实现整理
#include<stdio.h>#define MAXSIZE 50#define ElemType inttypedef struct{ ElemType data[MAXSIZE]; int length;}sqList;sqList S; // 声明全局变量 // 初始化void InitSqList(sqList &S){ S.length = 0;}// 判断顺序表是否为空bool isEmpty(sqList &S){ if(S.原创 2021-07-18 20:31:10 · 784 阅读 · 0 评论 -
王道数据结构--顺序栈代码实现整理
#include<stdio.h>#define MAXSIZE 50#define ElemType inttypedef struct { ElemType data[MAXSIZE]; int top;}sqStack;sqStack S;// 初始化void InitStack(sqStack &S){ S.top = -1; // 初始值设置为了-1, // 设置为 0 也可, // 相应的,top指向栈顶元素的下一个存储单元 }// 判原创 2021-07-18 20:00:27 · 377 阅读 · 0 评论