算法
一些算法题的解答
李小白努力努力努力ing
这个作者很懒,什么都没留下…
展开
-
函数字符串删除某字符串中某一个字符时报错 Segmentation fault (core dumped)
代码如下:#include<iostream>#include<cstdio>using namespace std;char *aries_strerase(char *strSrc ,int n) { char *address = strSrc; int i = 0; for(i = 0; i < n ; i++){ strSrc++; } printf(" 跳过 %c \n",*strSrc); str原创 2021-07-23 10:09:17 · 98 阅读 · 0 评论 -
数组中出现次数超过一半的数字—数组
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]输出: 2来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ba...原创 2020-02-14 22:29:40 · 63 阅读 · 0 评论 -
二进制中1的个数—位运算
请实现一个函数,输入一个整数,输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:000000...原创 2020-02-14 22:07:52 · 243 阅读 · 0 评论 -
平方数之和—数论(费马平方和)
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2 + b2 = c。示例1:输入: 5输出: True解释: 1 * 1 + 2 * 2 = 5示例2:输入: 3输出: False来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sum-of-square-numbers推出:引理1:形如4k+3的自...原创 2020-02-14 14:40:29 · 927 阅读 · 0 评论 -
最小移动次数使数组元素相等—数论
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。示例:输入:[1,2,3]输出:3解释:只需要3次移动(注意每次移动会增加两个元素的值):[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]来源:力扣(LeetCode)链接:https://leetc...原创 2020-02-14 14:18:11 · 188 阅读 · 0 评论 -
流水作业的Johnson 法则
题目:某印刷厂有6项任务,J1,J2,J3,J4,J5,J6,在印刷车间各需时间为3,12,5,2,9,11,在装订车间需8,10,9,6,3,1。安排这些任务的加工次序。求解:(1) 将{a1,a2,a3,…an, b1,b2,…bn}排成非递减序列;(2) 依次从序列中抽出最小元素 m,如果m = aj。且作业 j还设有排入调度表,则把作业安排在调度表可达的最左面一项定位上。(n个作...原创 2020-01-28 13:52:51 · 2298 阅读 · 0 评论 -
数塔问题—动态规划
题目:有形如图所示的一个数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的数值和最大。解决方法:利用备忘录算法,其实其中选择方式则是贪心选择,用图像的方式解决,用图解的方式举例。能够得出最优解。c++代码如下:```cpp#include<iostream>#include<cstdio>using na...原创 2020-01-28 13:37:45 · 1463 阅读 · 2 评论 -
最优二叉搜索树—动态规划
最优二叉搜索树是建立在搜索树的基础上的一种最优解,一开始我也很纠结为什么会有查找不成功和查找成功的概念,后来才开始明白后来懂了如何去做,如果这点还没有明白那很难去懂什么是最优二叉搜索树,下面按照题目讲解主要内容:我们先来声明一下如何求二叉搜索树的权重形状1的平均查找次数形状2的平均查找次数计算的方程知道了如何计算平均查找次数,我们下面求解一下如何求解最优二叉搜索树问题将四个合...原创 2020-01-28 13:29:02 · 1710 阅读 · 0 评论 -
循环赛日程表--分治法
设有n=2^k个运动员,要进行网球循环赛。现在要设计一个满足以下要求的比赛日程表,每个选手必须与其他n-1个选手各赛一场,每个选手一天只能赛一次,循环赛一共进行n-1天,将比赛日程表设计成n行n列,表中除了第一列,其他n-1列才是我们要的,数组下标行列都从0开始,第i行j列代表第(i+1)位选手在第j天的对手:题解:首先我们找到规律,此图左上角与右下角相同,右上角与左下角相同,我们可以先求出上...原创 2019-10-16 15:18:47 · 8265 阅读 · 5 评论 -
C++快捷方法
LL代表long long,通常乘1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量。ans是long long类型的,ans += a[i] * 1LL * (a[i] - 1) / 2;不至于后面计算溢出,* 1LL之后类型就转换为long long, a内容是定义为int类型的。0x3F3F3F3F——ACM中的无穷大常量比如...转载 2019-09-05 20:14:05 · 211 阅读 · 0 评论 -
二分查找—分治法
Position BinarySearch( List L, ElementType X ) { int mid; int left=1,right=L->Last; while(left原创 2018-09-09 20:09:36 · 131 阅读 · 0 评论 -
3柱汉诺塔问题—递归法
汉诺塔问题采用递归程序解题传统3柱汉诺塔解析主要思想:第一步:把n-1个盘子通过C移动到B上。第二步:把第n个盘子移动到C上。第三步:把n-1个盘子通过A移动到C上。重要思想:当n=2时A柱2个 分为两部分 第一个盘 和 最后一个盘A->B A->C B->C当n=3时A柱3个 分为两部分 第一盘第二盘 和 最后一盘第一二盘...原创 2019-09-05 21:27:02 · 2114 阅读 · 0 评论 -
棋盘覆盖-分治法
在一个 2^k * 2^k 个方格组成的棋盘中,若恰有一个方格与其它方格不同,则称该方格为一特殊方格,称该棋盘为一特殊棋盘。显然特殊方格在棋盘上出现的位置有 4^k 种情形。因而对任何 k>=0 ,有 4^k 种不同的特殊棋盘。下图所示的特殊棋盘为 k=2 时 16 个特殊棋盘中的一个。 在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所...原创 2019-10-16 14:59:11 · 388 阅读 · 0 评论 -
4柱汉诺塔问题——递归法
主要思想:函数Hanoi4:第一步:将A柱上n个盘子划分为上下两部分,下方部分共有k(1≤k≤n)个盘子,上方部分共有n - k个盘子。第二步:将A柱上面部分n–k个盘子经过C、D柱移至B柱。第三步:将A柱剩余的k个盘子经过C柱移至D柱。第四步:将B柱上的n–k个盘子经过A、C柱移至D柱。函数Hanoi3:(三柱汉诺塔算法)1)、将A柱上方k-1个盘子经过B柱移至C柱。2)、将C...原创 2019-09-05 22:06:37 · 5580 阅读 · 1 评论 -
数字游戏---动态规划
丁丁最近沉迷于一个数字游戏之中。这个游戏看似简单,但丁丁在研究了许多天之后却发觉原来在简单的规则下想要赢得这个游戏并不那么容易。游戏是这样的,在你面前有一圈整数(一共n个),你要按顺序将其分为m个部分,各部分内的数字相加,相加所得的m个结果对10取模后再相乘,最终得到一个数k。游戏的要求是使你所得的k最大或者最小。例如,对于下面这圈数字(n=4,m=2):当要求最小值时,((2-1) mod...原创 2019-09-26 07:34:57 · 534 阅读 · 0 评论 -
开心的金明---动态规划
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格(都是整数元)。他希望在不...原创 2019-09-28 13:32:02 · 284 阅读 · 1 评论 -
石子归并--动态规划
表面上看起来好像是贪心实则需要自己利用不断的区域性dp来做最主要的便是画图打标找到状态转移方程#include#include#include<algorithm>#include<cstring>using namespace std;int dp[502][502];int w[502];int main(){ memset(...原创 2019-11-04 23:28:10 · 107 阅读 · 0 评论 -
最长公共子序列--动态规划
题目描述给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence)。比如字符串1:BDCABA;字符串2:ABCBDAB则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA结果这类问题通常采用二维数组进行动态规划,记忆化搜索做出此图后我们将特殊点标注依此类推进行DFS操作...原创 2020-01-20 19:08:08 · 95 阅读 · 0 评论 -
矩阵连乘问题---动态规划
问题描述:给定n个矩阵A1,A2,…,An,其中,Ai与Aj+1是可乘的,i=1,2,…,n-l。你的任务是要确定矩阵连乘的运算次序,使计算这n个矩阵的连乘积A1A2…An时总的元素乘法次数达到最少。例如:3个矩阵A1,A2,A3,阶分别为10×100、100×5、5×50,计算连乘积A1A2A3时按(A1A2)A3所需的元素乘法次数达到最少,为7500次。输入每组测试数据的第1行是一个...原创 2019-10-18 14:06:52 · 1136 阅读 · 0 评论 -
高等排序—计数排序
高等排序 计数排序或称桶排序,箱排序includedefine MAX 1000int main() { int a[20],c[MAX],b[20],j; int i,n; scanf(“%d”,&n); for(i=0;i<=MAX;i++){ c[i]=0; } for(i=1;...原创 2018-07-27 15:22:26 · 98 阅读 · 0 评论 -
高等排序—归并排序
由少至多的逐渐形成子序列 在子序列中排序 然后融合 #includedefine MAXN 1000void merge_pass(int list[], int sorted[], int N, int length) { int a,b,c; int i; int j; c=0; for(i=0;i&l...原创 2018-07-27 16:08:16 · 96 阅读 · 0 评论 -
高等排序—快速排序
快速排序的核心是 通过不断的分割将序列变得越来越有序 话不多说上码includedefine MAX 1000int partition(int A[MAX],int p,int r) { int x,i,j,t; x = A[r]; i=p-1; for(j=p;j...原创 2018-07-27 15:47:35 · 139 阅读 · 0 评论