小编Gin*_*Gin的帖子

从数组中找到一对元素,其总和等于给定的数字

给定n个整数的数组并给出数字X,找到所有唯一的元素对(a,b),其总和等于X.

以下是我的解决方案,它是O(nLog(n)+ n),但我不确定它是否是最优的.

int main(void)
{
    int arr [10] = {1,2,3,4,5,6,7,8,9,0};
    findpair(arr, 10, 7);
}
void findpair(int arr[], int len, int sum)
{
    std::sort(arr, arr+len);
    int i = 0;
    int j = len -1;
    while( i < j){
        while((arr[i] + arr[j]) <= sum && i < j)
        {
            if((arr[i] + arr[j]) == sum)
                cout << "(" << arr[i] << "," << arr[j] << ")" << endl;
            i++;
        }
        j--;
        while((arr[i] + arr[j]) >= sum && i < j)
        {
            if((arr[i] …
Run Code Online (Sandbox Code Playgroud)

algorithm

121
推荐指数
4
解决办法
28万
查看次数

如何在不改变相对位置的情况下将整数数组排序为负,零,正部分?

给出O(n)算法,该算法将数组S作为输入,然后将S分成三组:负数,零和正数.演示如何在适当的位置实现它,即不分配新内存.你必须保持数字的相对顺序.例如:{-1,4,0​​,-2,1,2} ==> {-1,-2,0,4,1,2}

我不确定这样的解决方案是否会退出.我能想到的最佳解决方案是:

解决方案1:使用一个额外的整数数组,然后遍历整个数组得到负数,然后是0,然后是正数.

解决方案2:不要保持数字的相对顺序.然后循环数组两次:

    template <typename Type>  
void Partion(Type *array, int begin, int end, Type v, int &l, int &r) 
{  
    l = begin;  
    for (int i=begin; i!=end; ++i)  
    {  
        if (array[i] < v)  
            swap(array[i], array[l++]);  
    }  
    r = l;  
    for (int j=l; j!=end; ++j)  
    {  
        if (array[j] == v)  
            swap(array[j], array[r++]);  
    }  
} 
Run Code Online (Sandbox Code Playgroud)

arrays algorithm data-partitioning

13
推荐指数
2
解决办法
8888
查看次数

在类声明中你可以拥有的一件事是你在工会声明中永远不会遇到的吗?

我在网上看到了这个面试问题.可悲的是,我无法弄清楚这样的事情......函数,构造函数,析构函数

顺便说一句,我认为结构和类在C++中几乎相同,除了默认情况下类的成员是私有的,而结构的成员默认是公共的.默认情况下,类之间的继承也是私有的,默认情况下,结构之间的继承是公共的.

而union与struct不同,因为它所有的成员都在同一个地方.

谢谢

c++ unions

4
推荐指数
1
解决办法
185
查看次数

关于功能设计的问题

我刚刚接受了一个关于如何设计一个简单函数的面试问题 - 在Int Array中找到第二大数字.

int findSecondLargest(int * arr, int len){
    int second = 0;
    ...

    return second;
}
Run Code Online (Sandbox Code Playgroud)

但是,我被问到以下有关如何处理问题的问题.

  1. 如果len小于2(我想我们可以返回一个特殊值,如0或MinInt.)
  2. 但是,如果第二大是0(因为在这种情况下,我无法区分错误和正常返回值.所以我可能会抛出异常)
  3. 如果数组是{1,1,1}(因为1是最大的数字,不是第二大数.所以我可能会抛出异常)

我真的感到困惑.我认为不可能处理所有情况.我们通常必须记录函数的用法,而不是抛出异常.

希望有些建议.谢谢

//函数体由我自己编写.我非常喜欢Donotalo和PigBen设计的设计

c++

4
推荐指数
1
解决办法
465
查看次数

标签 统计

algorithm ×2

c++ ×2

arrays ×1

data-partitioning ×1

unions ×1