算法
分享在蓝桥杯、牛客、LeetCode等方面的算法题解
一直浮浮
冰霜般严厉,烈火般炙烤
展开
-
算法——替换字符串中的空格
问题描述请编写一个方法,将字符串中的空格全部替换成’%20’,假定该字符串有足够的空间存放新增字符,并且知道字符串的真实长度(小于等于1000);同时保证字符串有大小写的字母组成。方法论1、每将空格替换一次'%20',实际上字符串的真实长度就 +2;2、我们先遍历字符串,每遇到一个空格,用计数器保存:字符串的长度 +23、使用两个指针,一指针指向替换后的字符串长度的最后,二指针指向当前字符串的末尾, 二指针向前移动,如果遇到空格,一指针就将'%20'填入替换后string的末尾;否侧就原创 2021-04-14 11:19:13 · 190 阅读 · 0 评论 -
算法——变形词
问题描述给定两个字符串,请编写程序,确定其重新排序后是否相等 (区分大小写和空格)方法论方法一:对字符数组排序后比较———时间复杂度为 n*log以2为底n的对数(效果一般)方法二:1、创建一个长度为128数组,正好代表128个ASCII码字符;2、将其中一个串的每个字符对应的ASCII码,当做数组下标;3、每出现一次,该数组下标的值+1,直至第一个字符串遍历完成 4、然后,在将第二个字符串的每个字符对应的ASCII码,当做数组下标操纵数组,该数组下标的值 -1;5、如果减完之后该数组原创 2021-04-13 10:50:48 · 171 阅读 · 0 评论 -
最大子数组的累加和
问题:最大子数组的累加和参考代码#include <iostream>#include <cstdlib>#include <ctime>using namespace std;/* 最大子数组的累加和 */int findByDp(int array[], int N);int main(){ int N = 10; int array[N]; srand(time(NULL)); for(int i=0; i&l原创 2021-04-11 14:39:53 · 134 阅读 · 0 评论 -
第十一届蓝桥杯大赛省赛B组——跑步锻炼
题目描述分析1、days 表示从 从2020年1月1日 至 某年某月某日 的天数2、用 1~7 表示 周一 至 周日3、由于 2020年1月1日 是周六,那么用 (sum + 5) % 7 就能表示 某年某月某日 是星期几;4、穷举 2020年1月1日 ~ 2020年10月1日,可以分为两个部分:2020/1/1 ~ 2019/12/31 与 2020/1/1 ~ 2020 9/30 ;由于包括 2020/10/1,最后再 sum+=2答案:8879参考代码#inclu原创 2021-04-10 16:05:32 · 297 阅读 · 0 评论 -
算法——顺时针打印二维数组
问题描述 顺时针打印二维数组方法思路1、将数组一周当做一个循环2、循环打印数据参考代码及详细说明#include <iostream>using namespace std;/* 顺时针打印二维数组 *//* * 思路: * 将数组一周当做一个循环, * 循环打印数据*/void arr(int array[][4], int row, int col);int main(){ int array[][4]={ {1原创 2021-04-10 11:55:14 · 441 阅读 · 0 评论 -
快速排序——单向扫描分区法
快速排序——单向扫描分区法思想1、利用递归划分子问题2、定主元,将小于主元的元素放在主元的左侧, 大于主元的元素放在主元的右侧3、主元的左右两侧就是两个子问题,将每一个子问题重复第2步,即可使序列有序实施方案1、将主元定为每个序列或子序列的首元素2、设置左指针与右指针,左指针指向主元的下一次元素,右指针指向最右边的元素3、将左指针所指向的元素与主元比较,如果小于或等于主元,左指针向后移动,右指针不变;如果大于主元,则将左指针所指向的元素,与右指针指向的元素交换,左指针不变,原创 2021-04-07 10:55:48 · 578 阅读 · 0 评论 -
算法——二分查找(递归实现)
二分查找以及递归实现参考代码#include<stdio.h>void sortArray(int arr[], int n);int search(int arr[], int low, int high, int key);int Binary_search(int arr[], int low, int high, int key); // 递归算法 int main(){ int i; int array[] = {1, 3, 5, 7, 9, 2, 4, 6,原创 2021-03-31 11:59:08 · 522 阅读 · 0 评论 -
历届试题 核桃的数量
资源限制时间限制:1.0s 内存限制:512.0MB问题描述 小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是: 1、各组的核桃数量必须相同2、各组内必须能平分核桃(当然是不能打碎的)3、尽量提供满足1,2条件的最小数量(节约闹革命嘛)输入格式 输入包含三个正整数a, b, c,表示每个组正在加班的人数原创 2021-03-27 17:44:17 · 59 阅读 · 0 评论 -
算法——0~1之间浮点实数的二进制表示
问题描述 0~1直接浮点实数的二进制表示 1、给定一个介于0和1之间的实数,(如0.625),类型为double 打印它的二级制表示(0.101), 因为小数点后的二进制分别表示0.5,0.25,0.125...... 2、如果该数字无法精确地用32位以内的二进制数表示,则打印"ERROR" 方法论1、利用一个 字符数组 来存放该浮点实数的二进制数2、用该浮点数乘以2,如果乘2之后大于原创 2021-03-20 11:48:56 · 1023 阅读 · 0 评论 -
算法——将整数中的二进制奇偶位互换(位运算)
问题描述 将整数中的二进制奇偶位互换方法思路1、利用位运算的思想,先将奇偶位分别取出来2、取奇数位:将原数和32位0101 0101(int占32位)做 &运算取出,我们其实可以利用16进制0x55555555代替32位0、13、取偶数位:将原数与32位1010 1010(0xaaaaaaaa)做&运算取出4、将取出的奇,偶位相互移位后相加就完成了奇偶位互换参考代码#include<stdio.h>int main(){ int num; s原创 2021-03-20 10:45:17 · 839 阅读 · 0 评论 -
算法——二进制中1的个数(位运算)
问题描述 请实现一个函数,输入一个整数, 输出该数的二进制表示中1的个数。 例:9的二进制为1001,有2位是1方法论1、在我们的机器上,int数据类型是32位;2、因此,我们将1从最低位一直移动到最高位,并将每一位与输出的数值a 做 与运算3、如果a对应位是1,则将计数器 cnt+1,最终 cnt 就是该整数二进制数中1的个数。#include<stdio.h>int原创 2021-03-19 13:07:44 · 526 阅读 · 0 评论 -
算法——位运算(找出唯一成对的数)
问题描述 1-1000这1000个数放在含有1001个元素的数组中, 只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次, 设计一个算法,将它找出来;不用辅助存储空间,能否设计一个算法?注意题目:不用辅助存储空间方法论1、使用 0 与每一位数作为运算,如: A^0 = A; A^A = 02、因为只有一对重复的数,因此对每个数做两次位运算,就会等于 03、而重复的数实际上是做了三次位运算,因此还是自身参考代码及详细说明#include<stdi原创 2021-03-18 15:10:59 · 191 阅读 · 0 评论 -
基础练习 分解质因数
资源限制时间限制:1.0s 内存限制:512.0MB问题描述 求出区间[a,b]中所有整数的质因数分解。输入格式 输入两个整数a,b。输出格式 每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)样例输入3 10样原创 2021-03-17 16:45:02 · 120 阅读 · 0 评论 -
基础练习 01字串
资源限制时间限制:1.0s 内存限制:512.0MB问题描述 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:0000000001000100001100100请按从小到大的顺序输出这32种01串。输入格式本试题没有输入。输出格式输出32行,按从小到大的顺序每行一个长度为5的01串。样例输出00000000010001000011<以下部分省略>参考代码及详细说明#include<stdio.h&原创 2021-03-14 15:40:53 · 45 阅读 · 0 评论 -
基础练习 十六进制转十进制
资源限制时间限制:1.0s 内存限制:512.0MB问题描述 从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。 注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。#3 样例输入FFFF样例输出65535参考代码及详细说明/** 十六进制转十进制 基本思路:先将十六进制数转换为二进制数,然后再将二进制数转换为十进制数 具体实施:用字符串来当作需要处理的数 */#include<stdio.h>#原创 2021-03-12 17:36:26 · 178 阅读 · 0 评论 -
基础练习 十六进制转八进制
资源限制时间限制:1.0s 内存限制:512.0MB问题描述 给定n个十六进制正整数,输出它们对应的八进制数。输入格式 输入的第一行为一个正整数n (1<=n<=10)。 接下来n行,每行一个由09、大写字母AF组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。输出格式 输出n行,每行为输入对应的八进制正整数。【注意】 输入的十六进制数不会有前导0,比如012A。 输出的八进制数也不能有前导0。样例输入 2 39原创 2021-03-11 20:54:44 · 298 阅读 · 0 评论