算法练习
南极点上找北
日有寸进,功不唐捐
展开
-
01背包问题(1)
1 题目(此题来源于郭炜《算法基础与在线实践》,结合教材和自己体会所写)1.1 问题表述有n种物品和容量为m的背包,每个物品可以选择放或者不放在背包里面(物品最多可以被选择一次),每个物品的体积为wi和价值为di,问背包价值最大为多少。通俗来讲,假设小黑去超市购物,购物车大小一定,每个商品的价值和大小都不一样,问怎样装购物车装满的情况下物品总价值最大。01背包问题就是每种物品至多拿...原创 2019-07-28 23:57:57 · 238 阅读 · 0 评论 -
混战世界(14)
1 问题(牛客网百度2019秋招笔试题)1.1 题目描述一共有n个小兵(3的倍数),第i个小兵的物理攻击为Ai,魔法攻击为Bi,将这些小兵平均分为三个队,一队参加物理伤害抗战(伤害之和W1为该队所有小兵的物伤之和),二队参加魔法抗战(伤害之和W2为该队所有小兵的法伤之和),三队参加混合战(伤害之和W3为该队所有小兵的物伤和法伤之和除以2),问怎样分配,使得W1+W2+W3之和最大。...原创 2019-08-07 21:09:08 · 137 阅读 · 0 评论 -
排列与组合(15)
1 排列问题1.1递归算法例如有三个数{1,2,3},可以看成1+{2,3}的排列,2+{1,3}的排列,3+{1,2}的排列。1+{2,3}的排列有1,2,3和1,3,2。//这种方法规避不了含有相同元素的排列问题#include <iostream>#include <algorithm>using namespace std;void my...原创 2019-09-02 09:38:14 · 233 阅读 · 0 评论 -
字符串匹配(16)
1 一般方法#inlucde <iostream>using namespace std;int match(char* P,char* T){ int n = strlen(T),i = 0; //文本串 int m = strlen(P),j = 0; //模式串 if(n < m) return -1; ...原创 2019-09-03 09:41:20 · 117 阅读 · 0 评论 -
排序(17)
1 堆排序#include <iostream>using namespace std;//堆排序//交换两个数void myswap(int& a, int& b) { a ^= b; b ^= a; a ^= b;}void maxheap(int* arr, int start, int end) { //根节点是从0开始 int d...原创 2019-09-03 10:56:49 · 71 阅读 · 0 评论 -
能被3整除的数(18)
1 问题(此题来自牛客网)小Q得到一个神奇的数列: 1, 12, 123,...12345678910,1234567891011...。并且小Q对于能否被3整除这个性质很感兴趣。小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。2 样例输入 2 5输出 3说明:1 12 123 1234 12345中第2个到第5个为12 123...原创 2019-09-05 09:38:28 · 761 阅读 · 0 评论 -
二分问题(19)
1 二分查找二分查找先将数组进行排序,然后进行查找,因为考虑左闭右开或者左闭右闭问题,所以全部转为左闭右闭。#include <iostream>#include <algorithm>using namespace std;int binsearch(int* arr,int size,int p){ //考虑到左闭右开,或者左闭右闭 /...原创 2019-09-06 16:04:26 · 98 阅读 · 0 评论 -
快速找到和为零的四个数(20)
1 问题描述给定四个数组,A,B,C,D,从每个数组找出取出一个元素,使得a+b+c+d=0。问满足条件的一共有多少组。输入样例 第一行//每组元素的个数 剩下n行 //每组数组的元素6 -45 22 42 -16 -41 -27 56 30-36 53 -37 77-36 30 -75 -4626 -38...原创 2019-09-07 10:42:39 · 408 阅读 · 0 评论 -
可重复选元素的组合问题(21)
1 问题从n个元素中挑选m个元素,有多少组组合,可以重复选择。输入:3 3输出:10解析:从三个元素中选取三个元素,可以重复选,共有多少组组合。111 112 113 122 123 133 222 223 233 333 一共十组组合,注:121 112 211是同一种组合,不能重复计算。2 分析如果采用递归,必然包含大量的重复计算,运算复杂度呈指数级别增长,肯定超时。...原创 2019-09-09 10:08:02 · 2047 阅读 · 1 评论 -
组合之分苹果问题(22)
1 问题将n个苹果分给m个人,苹果都一样,人都一样。如果把4个苹果分给3个人,121 112 211是一种可能。问一共有多少种方法。2 分析1 当苹果比人数少时,就等同于将等数量的苹果分给等数量的人,因为人数较多,空的人都一样,所以做等效处理。比如2个苹果分给3个人和2个苹果分给2个人结果是一样的。2 当苹果数<=人数时,等效于:有人没有苹果和所有人都分到苹果两种可能,然...原创 2019-09-09 10:58:47 · 1996 阅读 · 1 评论 -
消除重复数字(13)
1 题目(题来源牛客网华为2019秋招笔试题)1.1 问题描述给定一个正整数,给出消除重复数字以后最大的整数。1.2 输入示例4232341.3 输出示例4322 问题分析这道题想了很久,没有想出来,采用牛客上提供的方法。此题相当于一个字符串查重调整问题,需要两重循环,(相当于冒泡排序需要两层循环)。用两指针i,j开始指向字符串的首地址,然后开始遍历,j...原创 2019-08-07 16:35:21 · 1039 阅读 · 2 评论 -
整数反转求和(12)
1 题目(题来源牛客网华为2019秋招笔试题)1.1 问题描述输入两个正整数a和b,然后分别将它们的数字按照高位在右边的方式反转求和。例如:reverseAdd(123,456) == 321 + 654 = = 975;1.2 输入示例123 4561.3 输出示例2 问题分析可以先用string将两个数记录下来,然后从右到左遍历每一个string,相当于遍历...原创 2019-08-07 15:45:07 · 882 阅读 · 0 评论 -
最长上升子序列(9)
1 问题(郭炜《算法基础于在线实践》)1.1 问题描述给定一个序列(a1,a2,a3,...,an),从中任意提取一个子序列(bk1,bk2,bk3,...,bkm),若满足bk1 < bk2 < ... <bkm,则b是a的一个上升子序列。求a的最长上升子序列的长度。1.2 输入数据第一行N是序列的长度,第二行有N个整数,是序列的各个元素。1.3 输入样...原创 2019-08-02 11:43:26 · 119 阅读 · 0 评论 -
小Q的歌单(2)
1 题目(此题来源于牛客网腾讯2018秋招笔试真题)1.1 问题描述小q有x首长为A的不同的歌和长为y首长度为B的不同的歌,从种选取任意首,组成长度为k的歌单,每首歌只能被选取一次,不考虑歌单内歌曲的先后顺序,问有多少种组成方法。1.2 输入描述第一行是一个整数,表示歌单的总长度为K。第二行有四个整数,A(<=10)、X(<=100)、B(<=10)、Y(...原创 2019-07-29 18:02:30 · 142 阅读 · 0 评论 -
完全背包问题(3)
1 问题(此题来源于郭炜《算法基础与在线实践》,结合教材和自己体会所写)1.2 问题描述有N种物品,背包容积为M。每种物品都有对应的体积和价值,分别为w和d。每个物品可以取多次,其他参见01背包问题,01背包问题每种物品至多可以取1次,其他和完全背包问题一样。通俗来讲,假设小黑去超市购物,购物车大小一定,每个商品的价值和大小都不一样,问怎样装购物车装满的情况下物品总价值最大。01背...原创 2019-07-30 00:40:09 · 217 阅读 · 0 评论 -
滑雪(10)
1 问题(郭炜《算法基础与在线实践》7.6)1.1 问题描述小黑喜欢滑雪,为了能滑动,必须由高位置向低位置滑动,小黑想尽可能滑雪距离长。有一个二维数组,代表每个地点的高程。1.2 输入数据第一行代表区域的行数R和列数C(1 <= R,C <= 100)。下面有R行,每行有C个整数,代表高度h,0 <= h <= 10000。输出要求,输出最长滑行...原创 2019-08-02 23:25:34 · 151 阅读 · 1 评论 -
最长公共子序列(11)未完成
1 问题2 问题分析3 代码编写#include <iostream>#include <algorith>#include <string>using namespace std;void test(){ char str1[1000]; char str2[1000]; while(cin>>str...原创 2019-08-02 23:50:35 · 73 阅读 · 0 评论 -
多重背包问题(4)
1 问题(此题在csdn上查找了大量资料)多重背包问题是01背包问题和完全背包问题的改版,背包的容量为M(不超过背包时全部初始化为0,刚好装满第0容量初始化为0,其他初始化为-1,见后面代码),有n种物品,每种物品的价值为di,重量为wi,最多可以取ci件。问背包所放价值最大是多少。通俗来讲,小黑推着购物车去超市,购物车容量一定,有n种物品,啤酒饮料矿泉水,瓜子花生八宝粥等,每种物品最...原创 2019-07-31 00:24:38 · 347 阅读 · 0 评论 -
安排机器(5)
1 题目(此题来源于牛客网腾讯2018秋招笔试真题)1.1 问题描述有m个任务, 第i个任务需要xi的时间去完成,难度等级为yi。有n台机器,每台机器的最长工作时间为zi,机器等级为wi。对于一个任务,只能交给一台机器完成,机器的工作时间需>=任务所需时间且机器等级需>=任务难度等级,才可以用这台机器完成这个任务。完成这个任务将获得200*xi+3*yi的收益。...原创 2019-07-31 15:54:04 · 172 阅读 · 0 评论 -
字符串碎片(6)
1 题目(此题来源牛客网网易2018秋招笔试真题)1.1 题目描述一个小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,“aaabbaaac”由下面碎片组成,aaa,bb,c。求其平均长度(保留两位小数)。1.2 输入描述输入包括一个字符串s,字符串长度length(1<=length<=50),s只含小写字母。aaabbaaac1.3 输出描...原创 2019-08-01 22:23:45 · 262 阅读 · 0 评论 -
重排数列(7)
1 题目(此题来源牛客网网易2018秋招笔试真题)1.1 题目描述有一个长度为N的正整数数列A = {A[1],A[2],A[3]...,A[n]}。对该数列进行重新排列,使数列A满足所有的A[i]*A[i+1](1 <= i <= N-1)都是4的倍数。判断某一数列重新排列之后是否满足以上要求。1.2 输入描述输入第一行为需要判断的数列个数t(1 <...原创 2019-08-01 23:28:22 · 352 阅读 · 1 评论 -
合唱(8)
1 题目(此题来源牛客网网易2018秋招笔试真题)1.1 题目描述小Q和牛博士合唱一首歌曲,这首歌曲由n个音调组成,每个音调由一个正整数表示。对于每个音调要么由小Q演唱要么由牛博士演唱,对于一系列音调演唱的难度等于所有相邻音调变化幅度之和, 例如一个音调序列是8, 8, 13, 12, 那么它的难度等于|8 - 8| + |13 - 8| + |12 - 13| = 6(其中||表...原创 2019-08-02 10:04:14 · 148 阅读 · 0 评论 -
排列之一个排列转换成另一个排列 求逆序数(23)
1 问题有一个排列A(元素无重复),经过一定步数的转换,转为排列B。交换A中第i个元素和第j个元素的代价为|i-j|。输入:n //元素个数n个整数 //排列An个整数 //排列B输出:一个整数 //需要的代价2 分析求两个元素的逆序数,(如果大数在小数前面,则是一个逆序,4231逆序数为3+1+1=5),逆序数表示经过逆序数次转换可以转为有序...原创 2019-09-10 16:51:55 · 1334 阅读 · 0 评论