面试算法 最长连续递增序列 (贪心算法)

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

你可能感兴趣的:(面试,算法,贪心算法,算法,c++,学习,面试)