zoukankan      html  css  js  c++  java
  • 【一道笔试题】找出最连续数字的最大长度

    如下,一串递增数字数组,如12244466666666,找出其中相同数字最长的长度。补全if中的内容。

    int find( int x[], int n)
    {
    	int length = 0;
    	for (i=1;i<n;i++)
    	{
    		if (/* 只能在这里填写代码哦 */ )
    		{
    			length++;
    		}
    	}
    	return length;
    }
    

    小弟给出一个递归版:

    int find(int x[], int n)
    {
    	int length = 0;
    	int i;
    	for (i=1;i<n;i++)
    	{
    		if (x[i] == x[i-1] ? 1 :(length = (++length > (i = find(x + length,n - length)) ? length : i))?((i = n - 1) ? 0 : 0):0)
    		{
    			length++;
    		}
    	}
    	return length;
    }

    一网友的非递归版本:

    int find( int x[], int n)
    {
    	int length = 0;
    	for (int i=1;i<n;i++)
    	{
    		if (((i == 1)&&(x[0] == x[1]) ? length++ : 0) || (x[i] == x[i - 1] && (x[i - length] == x[i])) || (i == 1))
    		{
    			length++;
    		}
    	}
    	return length;
    } 
    

    其实该网友的 x[i] == x[i - 1] 完全可以不要,可以优化为:

    int find( int x[], int n)
    {
        int length = 0;
        for (int i=1;i<n;i++)
        {
            if (((i == 1)&&(x[0] == x[1]) ? length++ : 0) || (x[i - length] == x[i]) || (i == 1))
            {
                length++;
            }
        }
        return length;
    } 
    
  • 相关阅读:
    BEC listen and translation exercise 44
    中译英12
    BEC listen and translation exercise 43
    中译英11
    BEC listen and translation exercise 42
    中译英10
    BEC listen and translation exercise 41
    中译英9
    BEC listen and translation exercise 40
    中译英8
  • 原文地址:https://www.cnblogs.com/newcj/p/2058069.html
Copyright © 2011-2022 走看看