求一次循环既查找出复行的最优算法! ---------------------- 急

anantnt203120 2005-01-07 09:51:00
请指教:
在一个表格的列中有一int列会有重复,如何只循环一次就将有重复的列标记出。描述即可!
...全文
204 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiang75 2005-01-27
  • 打赏
  • 举报
回复
如果Int 列得数值是有估算得范围得得话也可以用桶排序找出,这是最快得方法了.
anantnt203120 2005-01-13
  • 打赏
  • 举报
回复
top
hanyaocsdn 2005-01-07
  • 打赏
  • 举报
回复
帮你顶
anantnt203120 2005-01-07
  • 打赏
  • 举报
回复
没有难度,只是求一个最高效的算法!
myhero811104 2005-01-07
  • 打赏
  • 举报
回复
gzyx
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
我想楼主是不是已经按此思路已经实现了,呵呵.
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
看看这个
using System;
using System.Collections;

namespace ConsoleApplication1
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{

class Data
{
public int key=0;
public object obj=null;
public bool diploid=false;
}

/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Data[] data=new Data[100];
//要在此对data赋值

Hashtable hashtable = new Hashtable();
for(int a=0;a<data.Length;a++)
{
Data temp=(Data)hashtable[data[a].key];
if(temp==null)
{
hashtable.Add(data[a].key,data[a]);
}
else
{
temp.diploid=true;
data[a].diploid=true;
hashtable.Remove(temp.key);
hashtable.Add(data[a].key,data[a]);
}
}

}
}
}
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
恩,这个问题有难度的啊,呵呵,我想想.
anantnt203120 2005-01-07
  • 打赏
  • 举报
回复
举个例子说明:
行号 数值
1 1
2 2
3 2
4 1
5 3
6 4
那么我就要求标记出
行号 数值 标记
1 1 true
2 2 true
3 2 true
4 3
5 1 true
6 4
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
楼主的意思是说
int[] b={1,1,2,3,4,4,5,5,6,6,9,0,10}
整理完应该是
int[] b={2,3,9,0,10}
吗?

还是
int[] b={1,2,3,4,5,6,9,0,10}
请说明
DeliverGuy 2005-01-07
  • 打赏
  • 举报
回复
跟踪先~
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
我想我的方法在数据量大的情况下会比al.Contains(你的表格[i]))
这个方法快的,因为哈西表是不使用循环做重复检测的,它的取Key时间应该是一个常数,在数据量大的情况下这一点相当重要.
anantnt203120 2005-01-07
  • 打赏
  • 举报
回复
都忽律了一个重要环节:
首先在list里不存在插入list里,继续循环发现有重复,则标记,但是在list中与它重复的记录没有标记,与要求不付。
用hashtable是一个办法,hashtable里保存判断重复的列的值和行号,有重复就将hashtable中的记录和没插入的记录都标记,有人有更好的办法吗?
brightheroes 2005-01-07
  • 打赏
  • 举报
回复
那第一次插入的就无法标记,要求将所有重复的都标记,你漏掉了第一个。
......
uffeng 2005-01-07
  • 打赏
  • 举报
回复
到底是行 还是列?
zhiang75 2005-01-07
  • 打赏
  • 举报
回复
Hashtable hashtable = new Hashtable();
for(int i = 0; i <你的表格.count i ++)
{
try
{
hashtable.Add(你的表格[i],你的表格[i])
}
catch(Exception e)
{
Console.WriteLine(你的表格[i],已经存在);
}
}
hyspeter 2005-01-07
  • 打赏
  • 举报
回复
我重新说一下思路,首先要定义个一个hashtable,然后循环表格,
在hashtable里查找表格里的内容,如果有标记,没有则插入hashtable,
在hahtable内部有个内部循环,他用的是快表查询(起码delphi是这样)比自己的循环快多了
hyspeter 2005-01-07
  • 打赏
  • 举报
回复
老哥,我说循环的表格,第一个格和谁重复呀
hyspeter 2005-01-07
  • 打赏
  • 举报
回复
叫hashtable
anantnt203120 2005-01-07
  • 打赏
  • 举报
回复
回复人: hyspeter(独钓寒江) ( ) 信誉:100 2005-01-07 09:55:00 得分: 0


定义个list,,循环-》首先查找-》如果有则标记,没有则插入。

那第一次插入的就无法标记,要求将所有重复的都标记,你漏掉了第一个。
加载更多回复(4)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧