小编Ron*_*zii的帖子

我需要一个最优算法来找到数字N的最大除数.最好是在C++或C#中

我目前正在使用以下代码,但它对于大数字来说非常慢



        static int divisor(int number)
        {
            int i;
            for (i = number / 2; i >= 1; i--)
            {
                if (number % i == 0)
                {
                    break;
                }
            }
            return i;
        }
Run Code Online (Sandbox Code Playgroud)

c# c++ algorithm

9
推荐指数
2
解决办法
2万
查看次数

最长的重复子串更好的复杂性

我通过在对后缀列表进行排序后比较字符串的后缀来实现解决方案.有没有比这段代码更好的线性时间算法?

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void preCompute(string input[],string s)
{
    int n = s.length();
    for(int i=0; i<n; i++)
        input[i] = s.substr(i,n);
}
string LongestCommonSubString(string first,string second)
{
    int n = min(first.length(),second.length());
    for(int i=0; i<n; i++)
        if(first[i]!=second[i])
            return first.substr(0,i);
    return first.substr(0,n);
}
string lrs(string s)
{
    int n = s.length();
    string input[n];
    preCompute(input,s);
    sort(input, input+n);
    string lrs = "";
    for(int i=0; i<n-1; i++)
    {
        string x = LongestCommonSubString(input[i],input[i+1]);
        if(x.length()>lrs.length())
        {
            lrs = x;
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

string algorithm

3
推荐指数
1
解决办法
2085
查看次数

标签 统计

algorithm ×2

c# ×1

c++ ×1

string ×1