
算法
哟米 2000
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法】C++ 最长公共子串长度
最长公共子串长度串 A 以 i 为结尾和串 B 以 j 为结尾的最长公共子序列长度maxlen[i][j]=max(maxlen[i][j-1],maxlen[i-1][j])当A的第i-1字符个和B的第j-1个字符一样时maxlen[i][j] = maxlen[i-1][j-1] + 1;#include <stdio.h>#include <string.h>#define N 256int f(const char* s1, const c...原创 2021-03-19 14:31:26 · 1696 阅读 · 0 评论 -
【Algorithm】算法设计与分析 n皇后问题
1. 回溯法#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 8 //皇后的个数 int Compare(int line, int list); //与之前的行的皇后比较查看该位置是否可以存放void Print(); //输出成功的结果void Queen(int line); //寻找可以放置皇后的该行对应的列int queen[N] = { 0 };原创 2020-12-07 11:43:17 · 280 阅读 · 0 评论 -
【Algorithm】算法设计与分析 回溯法:n皇后问题
#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 8 //皇后的个数 int Compare(int line, int list); //与之前的行的皇后比较查看该位置是否可以存放void Print(); //输出成功的结果void Queen(int line); //寻找可以放置皇后的该行对应的列int queen[N] = { 0 }; //n.原创 2020-12-07 11:40:57 · 371 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA / C++实现:3.14 变位词
题目14.变位词。给定两个单词,判断这两个单词是否是变位词。如果两个单词的字母完全相同,只是位置有所不同,则这两个单词称为变位词。例如,eat和tea是变位词代码#include <iostream>#include <string>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input .原创 2020-11-20 20:24:03 · 445 阅读 · 1 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA / C++实现:3.9 荷兰国旗问题
题目:荷兰国旗问题。要求重新排列一个由字符R,W,B(R代表红色,W代表白色,B代表兰色,这都是荷兰国旗的颜色)构成的数组,使得所有的R都排在最前面,W排在其次B排在最后。为荷兰国旗问题设计一个算法,其时间性能是O(m)代码:#include <iostream>using namespace std; /* run this program using the console pauser or add your own getch, system("pause") .原创 2020-11-20 12:04:29 · 495 阅读 · 0 评论 -
【算法】贪心算法:活动安排问题
1)活动安排问题是在所给的活动集合中选出最大的相容活动子集合。2)主要思想是:将活动按照结束时间进行从小到大排序,挑选出结束时间尽量早的活动,并且满足后一个活动的起始时间晚于前一个活动的结束时间,全部找出这些活动就是最大的相容活动子集合。#include <iostream>#include <algorithm>using namespace std;struct ActionInfo{ int index; int startTime; int end.原创 2020-11-13 11:24:22 · 4323 阅读 · 0 评论 -
【算法】贪心算法:背包问题
#include <iostream>#include <algorithm>#define MAX_NUM 1000using namespace std; struct Goods //info of goods定义物品信息结构体{ int weight;// 物品重量 int value;// 物品价值 double ValPerWei;// 物品单位重量的价值 double load; //物品装入背包的部分数目,为0-1之间 .原创 2020-11-13 09:14:55 · 358 阅读 · 0 评论 -
【算法】贪心算法:混合牛奶
#include <iostream>#include <algorithm>using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */bool comp(pair<int, int> A, pair<int, int> B){ return A.fi...原创 2020-10-30 22:25:26 · 473 阅读 · 0 评论 -
【算法】贪心算法:数列分段
#include <iostream>#include <algorithm>using namespace std;/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char** argv) { int N, M, add = 0, temp, sum = 0; ci...原创 2020-10-30 21:34:22 · 382 阅读 · 0 评论 -
【算法】贪心算法:合并果子
#include <iostream>#include <algorithm>using namespace std;int main(int argc, char** argv) { int n; int fruits[10000] = {0};//直接初始化全为0 int strength = 0; cin >> n; for (int i = 0; i < n; i++) { cin >> fruits[i]...原创 2020-10-30 21:11:02 · 841 阅读 · 0 评论 -
【算法】动态规划:数塔问题
#include <iostream>#include <algorithm>using namespace std;/*数塔问题:描述:从数塔的顶层出发,在每一个节点可以选择左右方向,一直走到最底层。求找出一条路径,使得路径上的数值和最大。 d[n][n] 数塔,三角矩阵 maxAdd[n][n] 存储动态规划每一步决策结果path[n][n] 存储每一次觉得所选择的数组在d[n][n]中的列下标maxAdd[n-1][j] = d[n-1][j], 0 .原创 2020-10-30 11:21:06 · 1579 阅读 · 0 评论 -
【算法】动态规划:最大子段和问题
#include <iostream>#include <algorithm>using namespace std;//动态规划求解最大子段和问题int maxSubSumDP(int a[], int n){ int f[n+1]; f[0] = 0; int res = -0x3f3f3f3f; for (int i = 1; i <= n; i++){ if (f[i-1] >= 0){ ...原创 2020-10-30 10:48:28 · 1565 阅读 · 0 评论 -
【算法】动态规划:0-1背包问题
#include <iostream>#include <algorithm> using namespace std;int KnapSack(int w[], int v[], int n, int C){ int V[n+1][C+1]; for(int i = 0; i <= n; i++) { V[i][0] = 0; } for(int j = 0; j <= C; j++) { .原创 2020-10-30 10:44:56 · 388 阅读 · 0 评论 -
【算法】动态规划:存在性:青蛙跳石头的问题
有n个石头分别在x轴0-n-1位置上,一只青蛙在石头0上,想跳到n-1石头上, 在第i块石头上最多可以向右跳距离a[i],问青蛙能够跳到石头n-1上 public boolean canJump(int[] A) { int n = A.length; boolean[] f = new boolean[n]; for (int j = 1; j < n; j++) { f[j] = false; for(int i = 0; i < j; i++) { .原创 2020-10-27 11:10:02 · 909 阅读 · 0 评论 -
【算法】动态规划题目分析和解题步骤,例题:机器人从左上角只能向右向下到右下角有多少种不同的方式
第一次觉得动态规划题目这么清晰明了一. 动态规划题目特点:1.计数类有多少种方式走到右下角 有多少种方法选出k个数使得和是sum2.求最大最小值问题从左上角到右下角路径的最大数字和 最长上升子序列长度3. 求存在性石子游戏,先手是否必胜 能不能选出k个数使得和是sum二. 动态规划的解题步骤:确定状态 最后一步:最优策略挪动的最后一步 子问题:比原问题规模小 转移方程 初始条件和边界情况 初始条件通常是转移方程计算不出来的所以需..原创 2020-10-27 10:56:58 · 1659 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:分治法-快速排序
package fourthChapter;public class QucikSort { public int Partition(int r[], int first, int end) { int i = first, j = end; while(i < j) { while (i < j && r[i ] <= r[j]) j--; if ( i < j) { int temp = r[i]; r[.原创 2020-10-08 21:37:47 · 398 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:分治法-数字旋转矩阵
输出N*Nd 数字旋转矩阵,N大于0小于等于10这是书上的例子,利用的是递归思想,从外层向里层填数package fourthChapter;public class DigitalRotationMatrix { public int data[][] = new int[6][6]; public void Full(int number, int begin, int size) { int i, j; if(size == 0) return; if (s.原创 2020-10-08 21:07:09 · 525 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.6.设计算法,在数组rn中删除所有元素值为x的元素,要求时间复杂性为O(m),空间 复杂性为O(1)
3.6.设计算法,在数组r[n]中删除所有元素值为x的元素,要求时间复杂性为O(N),空间复杂性为O(1)在空间复杂度的限定下,先判断是否为x, 然后重新写会到原来的数组里,这样就没有重新开辟空间!package thirdChapter;public class ArrDeleteRepeat { public void arrDeleteRepeat(int[] arr, int x) { int j = 0; int n = arr.length; for (int i.原创 2020-10-06 20:14:43 · 1337 阅读 · 1 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.5 设计算法求解 a mod m,其中a、n和m均为大于1的整数。
设计算法求解 a mod m,其中a、n和m均为大于1的整数。(提示:为了避免a超出int型的表示范围,应该每做一次乘法之后对n取模)package thirdChapter;public class AnModm { public int anModn(int a, int n, int m) { int i = 0; int num = 1; while (i < n) { num *= a; num = num % m; i++; } re原创 2020-10-05 19:41:09 · 1462 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.3 判断一个大整数能否被11将该数的十进制表从右端开始,每两位一组构成一个整数,然后将这些数相加,判断其和能否被1整除。
设计算法,判断一个大整数能否被11整除。可以通过以下方法:将该数的十进制表从右端开始,每两位一组构成一个整数,然后将这些数相加,判断其和能否被1整除。例如,将562843748分割成5,62,84,37,48,然后判断(5+62+84+37+48)能否被11整除package thirdChapter;public class Division11 { public boolean division11(long num) { int r = 0 ; String str = ne.原创 2020-10-05 19:12:49 · 1872 阅读 · 1 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式。例如,将6/8化简为3/4
3.2 分式化简。设计算法,将一个给定的真分数化简为最简分数形式,例如,将6/8化简为3/4package ThirdChapter;public class FractionalReduction { public void fracReduction(int numerator, int denominator) { //找到最大公约数,然后分别处以最大公约数 int m = numerator; int n = denominator; int r; whil.原创 2020-10-05 17:27:10 · 1779 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.7 设计算法,判断给定的自然数是否是完美数
7.圣经上说:神6天创造天地万有,第7日安歇。为什么是6天呢?任何一个自然数的因数中都有1和它本身,所有小于它本身的因数称为这个数的真因数,如果一个自然数的真因数之和等于它本身,这个自然数称为完美数。例如,6=1+2+3,因此6是完美数。神6天创造世界,暗示着该创造是完美的。设计算法,判断给定的自然数是否是完美数package firstChapter;public class PerfectNum { public boolean isPerfectNum(int num) { in.原创 2020-10-04 20:59:20 · 1021 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.5.编写程序,求n至少为多大时,n个“1”组成的整数能被2013整除
1.5.编写程序,求n至少为多大时,n个“1”组成的整数能被2013整除package firstChapter;public class N1Division { public int n1Division() { int count = 1; double num = 1; while (count <= 10000) { num = num * 10 + 1; if (num % 2013 == 0) { break; } c.原创 2020-10-04 20:00:04 · 1560 阅读 · 0 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.4.设数组a[m]中的元素均不相等,设计算法找出a[m]中一个既不是最大也不是最小的元素
1.4.设数组a[m]中的元素均不相等,设计算法找出a[m]中一个既不是最大也不是最小的元素package firstChapter;import java.util.Arrays;public class MaxNorMin { public void maxNorMin(int[] arr) { Arrays.sort(arr); for (int i = 1; i < arr.length - 1; i++) { System.out.println(arr[i].原创 2020-10-04 19:55:38 · 1747 阅读 · 1 评论 -
【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:1.3 设计算法求数组中相差最小的两个元素(称为最接近数)的差
这学期的《算法设计与分析》和《Java程序设计》课程让我想要试试实战操练一下,毕竟算法是真的很重要的呀!在后面的博客当中我会把王红梅老师的算法设计与分析第二版的课后算法设计题用Java语言编写实现,并分享在这里,希望能提高自己的算法能力和Java编程能力,也希望看到的你有所收获,一起加油吧!如果哪里有问题,欢迎留言指正!我会用 1.3 表示第一章 第三题,那就开始吧!1.3 设计算法求数组中相差最小的两个元素(称为最接近数)的差。package firstChapter;i..原创 2020-10-04 18:38:48 · 1850 阅读 · 0 评论 -
算法入门经典—— 03 分金币
分析:#include <iostream>#include <cstdio> #include <algorithm>using namespace std;const int maxn = 1000000 + 10;long long A[maxn], C[maxn], tot, M;int main(){ int n;...原创 2019-11-26 08:11:26 · 184 阅读 · 1 评论 -
算法入门经典—— 02 突击战
分析:还是贪心算法的一个应用。需要考虑到的是,将完成时间长的任务提前安排,因此还是需要排序。>> vector<数据类型> 数组名 //声明不定长数组在vector中排序使用vector< int > vi ; vi.push_back(1); vi.push_back(3); vi.push_back(0);...原创 2019-11-21 22:38:24 · 156 阅读 · 0 评论 -
算法入门经典—— 01 勇士斗恶龙
题目:分析提示:将输入的数字放进数组中,然后分别进行排序,比较大小。#include <iostream>#include <cstdio>#include <algorithm>using namespace std; const int maxn = 20000 + 5;int A[maxn], B[maxn];int...原创 2019-11-20 22:11:57 · 221 阅读 · 0 评论