算法设计与分析
算法设计与分析课程知识总结+各章节扩展算法,主要想通过每个算法记获得新思路~
Coaa.
转pm了,不会回复任何评论及私信了。
展开
-
leetcode数组中两个数的最大异或值 acwing最大异或对 trie树、贪心、位运算(模板题)
数组中两个数的最大异或值class Trie{ public: Trie *next[2]; Trie(){memset(next,0,sizeof(next));}};class Solution { Trie *root=new Trie();//代表根节点,根节点无值public: int query(int x){ int res=0; Trie *node = root;原创 2020-11-29 12:16:05 · 219 阅读 · 1 评论 -
leetcode283 移动零——双指针
官方双指针题解:应始终保持右指针到左指针均为零;左指针左边为非零。这样右指针移动到最右边,左右指针维护的区间就是0,即所有零都移动到右侧了。class Solution {public: void moveZeroes(vector<int>& nums) { int n = nums.size(), left = 0, right = 0; while (right < n) { if (nums[right原创 2020-11-20 11:13:20 · 163 阅读 · 0 评论 -
对一个特定的vector数组去重—双指针
已知一个vector数组元素为:1 1 2 2 2 3 4 5 5 5 6(是排好序的!!)进行去重该元素不是重复元素的条件,任选一个条件就行①它是第1个出现的数②a[i]!=a[i-1]vector<int>::iterator unique(vector<int> &a){ int j=0; for(int i=0;i<a.size();i++) if(!i||a[i]!=a[i-1]) //!i也可以不用写原创 2020-11-19 17:46:40 · 225 阅读 · 0 评论 -
最大k乘积问题---动态规划实验1
问题描述设I是一个n位十进制整数。如果将I划分为k段,则可得到k个整数。这k个整数的乘积称为I的一个k乘积。试设计一个算法,对于给定的I和k,求出I的最大k乘积。例如十进制整数 1234 划分为 3 段可有如下情形:1 × 2 × 34 = 681 × 23 × 4 = 9212 × 3 × 4 = 144编程任务对于给定的I 和k,编程计算I的最大k乘积。数据输入输入的第1 ...转载 2020-04-20 22:05:54 · 1275 阅读 · 1 评论 -
游艇租用问题---动态规划实验2
问题描述长江游艇俱乐部在长江上设置了n个游艇出租站1,2,…,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站i到游艇出租站j之间的租金为r(i,j),1£i<j£n。试设计一个算法,计算出从游艇出租站1到游艇出租站n所需的最少租金。编程任务对于给定的游艇出租站i到游艇出租站j之间的租金为r(i,j),1£i<j£n,编程计算从游艇出租站1到游...原创 2020-04-20 21:59:33 · 1675 阅读 · 0 评论 -
动态规划_导弹拦截问题 新水果取名 机器人规划路径
记录一下上午做的几道动态规划题目1.拦截导弹问题类似书中P109中的最长递增子序列问题感觉不难 也比较容易想#include <iostream>using namespace std;int main(){ int N,a[25],L[25]; while(cin>>N) { for(int i=0;i<N;i+...原创 2020-04-15 13:40:11 · 634 阅读 · 4 评论 -
求解最大子段和问题----分治 蛮力 dp
【问题描述】给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。例如:序列(-2,11,-4,13,-5,-2)的最大子序列和为20序列(-6,2,4,-7,5,3,2,-1,6,-9,10,-2)的最大子序列和为16。规定一个序列最大子段和至少是0,如果小于0,其结果为0。蛮力法穷举所有连续子序列来得到。设含有n个整数的序列a[0…n-1],穷举所有的连续子序列a...原创 2020-03-28 16:04:54 · 1463 阅读 · 0 评论 -
找两个有序数组中的中位数---分治法实验1
问题描述设X[ 0 : n - 1]和Y[ 0 : n – 1 ]为两个数组,每个数组中含有n个已排好序的数。找出X和Y的2n个数的中位数。编程任务利用分治策略试设计一个O (log n)时间的算法求出这2n个数的中位数。数据输入由文件input.txt提供输入数据。文件的第1行中有1个正整数n(n<=200),表示每个数组有n个数。接下来的两行分别是X,Y数组的元素。实现提示...原创 2020-03-18 23:33:15 · 2668 阅读 · 2 评论 -
Gray码问题---分治法实验2
问题描述Gray码是一个长度为2n的序列。序列中无相同的元素,每个元素都是长度为n位的串,相邻元素恰好只有一位不同。用分治策略设计一个算法对任意的n构造相应的Gray码。编程任务利用分治策略试设计一个算法对任意的n构造相应的Gray码。数据输入由文件input.txt提供输入数据n。实现提示把原问题分解为两个子问题,分别对两个子问题的每个数组后一位加0和1解决思路:①根据输出结...原创 2020-03-20 12:45:19 · 5417 阅读 · 0 评论 -
归并排序算法---分治+双递归
归并排序运用分治算法与递归思想,那么其双递归究竟是怎样的呢?今天被困扰了一会一直觉得并没有完全理解,后通过思考以及查阅资料,弄懂了其递归的真正实现过程!写给已了解归并排序的CoderCode:void Merge(int r[],int r1[],int s,int m,int t)//归并子序列{ int i=s,j=m+1; int k=s; while(i&...原创 2020-03-08 20:24:23 · 677 阅读 · 1 评论 -
快速排序---分治+代码解读
0在这里插入代码片原创 2020-03-09 13:40:16 · 180 阅读 · 0 评论 -
解读棋盘覆盖---分治法
照着书上讲解,用代码实现了一下,练练手。收获:构建与大问题相同的子问题,进行分治法。#include <iostream>using namespace std;//使用不同形状的L型骨牌覆盖棋盘上除特殊方格以外的所有方格// 2的k次幂*2的k次幂个方格 其中有一个特殊方格/*tr tc 子棋盘中左上角坐标 大小为sdr dc特殊方格放置位置子棋盘边长size*/...原创 2020-03-13 13:30:41 · 406 阅读 · 0 评论 -
解读最近对问题----分治法
照着书上和老师讲解,理解了使用分治法解决最大对问题,并用代码实现了一下在这里插入代码片原创 2020-03-13 20:33:53 · 369 阅读 · 0 评论 -
快速选择排序----减治法(找到数组中第k个元素)
#include <iostream>using namespace std;int QuickSelect(int a[],int left,int right,int k){ if(left>right) return -1; int i,j,t,temp; temp=a[left]; i=left; j=righ...原创 2020-03-17 19:33:57 · 2725 阅读 · 0 评论 -
hdu1029---Ignatius and the Princess IV
题意:N个数(N为奇数) 找出其中某数出现次数大于(N+1)/2的那个数#include <iostream>//1.直接数组排序 模拟//2.便利方法//不错的思路://根本是在一个序列中如果去掉两个不同的元素//那么原序列中的多元素,在新的序列中还是多元素#include<stdio.h>using namespace std;int main(){...原创 2020-03-16 20:15:45 · 125 阅读 · 0 评论 -
算法分析----基础知识点
1.算法分析主要分析什么?时间复杂度和空间复杂度??2.算法分析的目的是什么?分析算法占用计算机资源的情况,对算法做出比较和评价,设计出更好的算法。3.算法的时间复杂度与问题的什么因素相关?算法的时间复杂性与问题的规模相关,是问题大小n的函数。4.算法的渐进时间复杂度的含义?当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因...原创 2020-03-09 14:25:29 · 8479 阅读 · 2 评论 -
算法分析---分治法知识点
递归函数的调用、返回、递归等都需要使用栈这种数据结构。在函数调用时,需要确保在逐级调用后能够回归到最初的调用点,编译器会隐式实现一个堆栈,用来保存每一级函数调用时返回的函数返回值和地址//青蛙跳问题 青蛙只能跳一阶或二阶 设有n解台阶//问有多少种跳法int Jump(int n){if(n<1) return 0;if(n==1) return 1;if(n==2) ret...原创 2020-03-15 15:38:29 · 926 阅读 · 0 评论