涉及不同值的C ++函数问题

时间:2012-09-26 01:51:03

标签: c++

好的,我接到了一项任务,我在编写这个问题时遇到了很多问题。

# include <string>
using namespace std;
int listdistinct( string b[], int n );
// modifies b so that all the distinct values are in b[0..k-1] and returns k
// the distinct values are in the order of their leftmost appearance in original b
//  e.g.  3,6,3,19,6,3,11  with n=7   would be changed to 3,6,19,11,?,? with k=4 returned
// worstcase complexity is n log(n) or better.

我被认为是首发:

int listdistinct(string b[], int n) {
    string a[];
    sort b[];
    i=1;
    for i=0 , i<k {
        if b[i] == b[i-1] ;
        else { a[n] = b[i-1]; n++;}
    }
    return n;
}

好的,所以没有给出我问题的最佳描述。 这就是我认为我应该编码的方式。

b [] =数字数组, a [] =没有重复的数字的目的地,最后,c []将是一个数组,它在排序之前采用数组的顺序。

我需要做的是,匹配b []的长度并添加数字,例如1 2 3 4 ...等等到c []以维持我的订单。然后我可以对这两个数组进行排序,因此订单号与b []中的数组编号保持一致。

我有一个问题,知道如何设置for循环来执行此操作,重复多少次!

我也不知道如何订购数组,以便最频繁的数组来到数组的前面。

我遇到的最大问题是了解如何完成所有这些工作,并将算法保持在最差的情况下。

1 个答案:

答案 0 :(得分:1)

我认为你应该首先关注你的最后一个问题(how to do all of this, and keep the algorithm to an n log n worst case complexity ?),其余的应该关注。

在此您知道您需要至少解析一次所有输入数组:这是您复杂性的n

现在您可能需要保留另一个包含不同值的数组(在最坏的情况下,它将与输入数组的大小相同)。 log n表示您无法承受在此阵列上第二次循环,而是您可能希望针对此阵列查看一些二进制搜索解决方案(log n复杂度)。

因此,输入上的循环和第二个数组上的二进制搜索会为您提供n log n,现在您只需将其转换为正确的c ++,而Bob就是您的叔叔。