小编Pou*_*ami的帖子

找出数组中的重复元素

存在大小为n的数组,并且数组中包含的元素在1和n-1之间,使得每个元素出现一次并且仅一个元素出现多次.我们需要找到这个元素.

虽然这是一个非常常见的问题,但我仍然没有找到合适的答案.大多数建议是我应该将数组中的所有元素相加,然后从中减去所有索引的总和,但如果元素的数量非常大,这将不起作用.它会溢出.关于XOR门的使用也有一些建议dup = dup ^ arr[i] ^ i,我不清楚.

我已经提出了这个算法,这是一个增加算法的增强,并将在很大程度上减少溢出的机会!

for i=0 to n-1
  begin :
    diff = A[i] - i;
    sum  = sum + diff;
  end
Run Code Online (Sandbox Code Playgroud)

diff包含重复元素,但使用此方法我无法找到重复元素的索引.为此,我需要再次遍历数组,这是不可取的.任何人都可以提出一个更好的解决方案,不涉及添加方法或XOR方法在O(n)中工作?

c arrays algorithm complexity-theory big-o

21
推荐指数
1
解决办法
9395
查看次数

查找数组中的前n个最大元素

我有一个包含唯一元素的数组.我需要以尽可能最小的复杂性找出数组中的前n个最大元素.到目前为止,我能想到的解决方案具有O(n ^ 2)的复杂性.

    int A[]={1,2,3,8,7,5,3,4,6};
    int max=0;
    int i,j;
    int B[4]={0,0,0,0,};//where n=4;
     for(i=0;i<A.length();i++)
       {
         if(A[i]>max)
          max=A[i];
       }
     B[0]=max;
     for(i=1;i<n;i++){
       max=0;
       for(j=0;j<A.length();j++){
         if(A[j]>max&&A[j]<B[i-1])
            max=A[j];
       }
        B[i]=max;
     }
Run Code Online (Sandbox Code Playgroud)

如果有人能提出一个更复杂的解决方案,我将非常感激.而且我不打算改变原来的阵列!

c arrays algorithm complexity-theory

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

在C中有效地添加两个链表

我有两个链表,按照从最重要到最不重要的顺序表示十进制数字的数字.例如4->7->9->6,5->7 答案应该是4->8->5->3没有反转列表,因为反转列表会导致效率降低.

我正在考虑使用stack解决问题.我将遍历两个列表并将数据元素推送到两个单独的堆栈中.每个链接列表.然后我将两个堆栈弹出并添加两个元素,如果结果是两位数没有I 10对其进行模数化并将进位存储在临时变量中.余数存储在节点中,并将进位加到下一个总和中,依此类推.如果两个堆栈是s1和s2,结果链接列表是res.

temp = 0;
res = (node*)(malloc(sizeof(node*));

while(s1->top!=-1 || s2->top!=-1)
{  
    temp = 0;
    sum = pop(s1) + pop(s2);
    n1 = (node*)(malloc(sizeof(node*));
    temp = sum/10;
    sum = sum%10;
    sum = sum+temp;
    n1->data = sum;
    n1->next = res;
    res = n1;
    free n1;
    //temp=0;
}

if((s1->top==-1)&&(s2->top==-1))
{
    return res;
}
else if(s1->top==-1)
{
    while(s2->top!=-1)
    {
        temp = 0;
        sum = pop(s2);
        sum = sum + temp;
        temp = sum/10;
        sum = sum%10;
        n1 …
Run Code Online (Sandbox Code Playgroud)

c linked-list

7
推荐指数
2
解决办法
6808
查看次数

cout与c ++之间的差异

我仍然对c ++中的ostream和write(const char*s,streamsize n)和c ++中的cout之间的区别感到困惑.第一个函数将s指向的数据块(大小为n个字符)写入输出缓冲区.按顺序写入字符,直到写入n.而cout是类ostream的一个对象,表示标准输出流.它对应于cstdio流标准输出.任何人都可以清楚地看出这两个功能之间的差异.

c++

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

使用C将二进制数设置为位数

我有一个长度为8的二进制数,例如00110101设置了8位.我需要一个快速位计数来确定设置位数.像x = x&(x-1)那样运行算法会将它限制为包含数字中的设置位数但是我不太确定如何使用它.一点帮助就会明显!

c bit

5
推荐指数
1
解决办法
2234
查看次数

无法在 postgres 的 bytea 字段中插入 null

我无法在数据类型为 bytea(blob) 的 postgres 数据库中插入空值。这是我的 Java 代码片段:

ps.setNull(++index, java.sql.Types.BLOB);
Run Code Online (Sandbox Code Playgroud)

bytea 列是一个可为空的列。以下是表格说明。

testdb=# \d+ plan 
                           Table "public.plan"
   Column    | Type  | Modifiers | Storage  | Stats target | Description 

-------------+-------+-----------+----------+--------------+-------------

description | bytea |           | extended |              | 

Has OIDs: no
Run Code Online (Sandbox Code Playgroud)

我收到以下异常 java.sql.BatchUpdateException: Batch entry 11 INSERT INTO public.plan(description) VALUES(NULL) was aborted。调用 getNextException 以查看原因。

postgresql blob jdbc

5
推荐指数
1
解决办法
3233
查看次数

标签 统计

c ×4

algorithm ×2

arrays ×2

complexity-theory ×2

big-o ×1

bit ×1

blob ×1

c++ ×1

jdbc ×1

linked-list ×1

postgresql ×1