zoukankan      html  css  js  c++  java
  • 微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列

    求微软面试题:求整数随机数构成的数组中找到长度大于=3的最长的等差数列

    输出等差数列由小到大: 

    如果没有符合条件的就输出[0,0]

    格式:

    输入[1,3,0,5,-1,6]

    输出[-1,1,3,5]

    要求时间复杂度,空间复杂度尽量小


    这里我还没有想到更好的办法,目前只实现了一个sb版本的时间复杂度为O(n^3)的算法。。暴力破解。。

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    void main()
    {
    	int data[]={1,3,0,5,-1,6};
    	int length=sizeof(data)/sizeof(int);
    	sort(data,data+length-1);
    	
    	int maxLength=0;
    	int i;
    	int j;
    	vector<int> max_v;  //存放最大的那个队列的元素
    	vector<int> temp_v; //临时存放等差数列的元素
    	bool isChange=false;
    	for(i=0;i<length;i++)
    	{
    		for(j=i+1;j<length;j++)
    		{
    			isChange=false; //标记最大长度是否改变
    			int temp_length=2;
    			int temp_sub=data[j]-data[i];  //得到差值
    			int k;
    			int index_compare=j; 
    			temp_v.push_back(i);
    			temp_v.push_back(j);
    			for(k=j+1;k<length;k++)
    			{
    				if(data[k]-data[index_compare]==temp_sub)
    				{
    					temp_v.push_back(k);
    					index_compare=k; //每次都要改变下个数要比较的那个数,例如:1,2,3,4中,在2的时候要比较的是1,3对应2,4对应3.
    					temp_length++;
    					if(temp_length>maxLength)
    					{
    						isChange=true;
    						maxLength=temp_length;
    					}
    				}
    			}
    			if(isChange)
    				max_v=temp_v;
    			temp_v.clear();
    		}
    		
    	}
    	cout<<maxLength<<endl;
    	vector<int>::iterator it_v=max_v.begin();
    	while(it_v!=max_v.end())
    	{
    		cout<<data[(*it_v)]<<" ";
    		++it_v;
    	}
    }
    
    




  • 相关阅读:
    如何通过setTimeout理解JS运行机制详解
    css3系列之伪类选择器
    css3系列之属性选择器
    css3系列之伪元素选择器
    css3系列之兄弟选择器
    作为了解系列之 预处理器 和 后处理器
    网络系列之跨域
    网络系列之 cookie增删改查(封装)
    网络系列之 jsonp 百度联想词
    网络系列之 什么是ajax 封装ajax
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3293806.html
Copyright © 2011-2022 走看看