1.题目:最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。
序列的下标是连续的。。
2.算法:
1.暴力算法
2. 贪心算法
3.算法思想:
暴力算法:
1.首先建立一个循环,在这个循环中我们从每一个数开始寻找他的最长的递增的子数列
2.从每个数开始的查询子数列的方法,
3.首先建立while 循环 我们的在 while 循环里面 一直查看这个数,与之后的数 相比,看这个数小于之后那个数
4. 所以时间复杂度 为 O(n2)
贪心算法
思想就是
1.我只管你的开始位置,
2.每当我运行到一个位置,我就做一次比较,比较我现在的最大的递增子数列是多大,因为我们记住了,开始的 坐标所以我们知道递增的长度,=i - start +1;
3.每当我们的循环的这个坐标的数 ,在数组里面的值,小于之前哪一个,我们就更改开始的坐标。
4.再次运行,直到循环结束
4.贪心算法的标准解释:
贪心算法(greedy algorithm [8] ,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。
贪心算法一般按如下步骤进行:
①建立数学模型来描述问题 。
②把求解的问题分成若干个子问题 。
③对每个子问题求解,得到子问题的局部最优解 。
④把子问题的解局部最优解合成原来解问题的一个解 。
贪心算法是一种对某些求最优解问题的更简单、更迅速的设计技术。贪心算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,省去了为找最优解要穷尽所有可能而必须耗费的大量时间。贪心算法采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择,就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解。虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心算法不要回溯 。
代码:
/*************************************************
作者:She001
时间:2022/8/29
题目:最长连续递增序列
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。
序列的下标是连续的
算法:
1.暴力算法
2. 贪心算法
***************************************************/
#include
using namespace std;
//暴力算法
//算法思想 :
/*
1.首先建立一个循环,在这个循环中我们从每一个数开始寻找他的最长的递增的子数列
2.从每个数开始的查询子数列的方法,
3.首先建立while 循环 我们的在 while 循环里面 一直查看这个数,与之后的数 相比,看这个数小于之后那个数
4. 所以时间复杂度 为 O(n2)
*/
int fangfa_1(int num[],int n)//num int 类型的数组, n 数组的元素个数的多少
{
int i,j,sum=0,max=0;
for(i=0;i