热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

怎样最快方法从一段整数中找出最小不重复的的N个数?

已存在的整数放在一表中,要求得到N个与之不重复且最小的整数。可能大家不明白,举个例子N5的情况下(可变)1.如果表中已存在1,2,3,4,5,100
已存在的整数放在一表中 ,要求得到N个与之不重复且最小的整数 。可能大家不明白,举个例子

N = 5 的情况下(可变)
1. 如果表中已存在  1 , 2 , 3  , 4 , 5  , 100 
   那么应得到   6 , 7 , 8 , 9, 10 ;

2 . 如果表中已存在   1 , 3 , 4 , 5 , 6 
   那么应得到   2  , 7 , 8 , 9 , 10 

数据库不支持存储过程 ,所以只能在程序中完成 .

22 个解决方案

#1


int[] ss = new int[] { 1, 2, 3, 4, 5, 100 };
List sl = new List();
int i = 0;
int j = 1;

while(i < 5)   // 5表示要找个数
{
    for (int n = 0; n < ss.Length; n++)
    {
        if (j != ss[n])
        {
            i++;
            sl.Add(ss[n]);
        }
    }
}

#2


不知道对不对,没有测试。

#3


J的值没有变

#4


已存在的值是可变的,而且可能有几千或万个数字

#5


先放在ArrayList里排序一下,然后相邻的两个元素相减,如果大于1则说明存在与之不同的最小整数,就可以得到了,在和原先设定的N判断一下应该就可以得到指定数目的最小整数了

#6


先排号序,将序号与数比较,不相等则表示存在空位,将空位填上继续比较。

#7


???

#8


不对

int[] ss = new int[] { 1, 2, 3, 4, 5, 100 };
List sl = new List();
int i = 0;
int j = 1;
bool same;

while(i < 5)   // 5表示要找个数
{
    same = false;

    for (int n = 0; n < ss.Length; n++)
    {
        if (j == ss[n])
        {
            same = true;
        }
       if (true == same)
         break;
    }

    if (false == same)
    {
       i++;
       sl.add(j);
    }

    j++;
}

也没测试

#9


int[] ss = new int[] { 1, 2, 3, 4, 5, 100 };
List sl = new List();
int i = 0;
int j = 1;

while(i < 5)   // 5表示要找个数
{
    for (int n = 0; n < ss.Length; n++)
    {
        if (j != ss[n])
        {
            sl.Add(j);
            j++;
            i++;            
        }
        else
        {
            j++;
            n++;
        }
    }
}

#10


先判断第一个数(设为a)是否为1
否  则:1----a-1为N的前a-1个数
然后判断第1个和第2个数之间。。。。。。。。。

#11


不过前提是先排序

#12


或者闹2个数组
一个放自然数1,2,3。。。
另外放已经排序好的题中数组;
然后比较。。。答案即出。。

#13


int[] ss = new int[] { 1, 2, 3, 4, 5, 100 };
List sl = new List();
int i = 0;
int j = 1;
int n = 0;
int m;
while(i < 5)   // 5表示要找个数
{
        if (j != ss[n])
        {
            sl.Add(j);
            j++;
            i++;            
        }
        else
        {
            j++;
            n++;
        }
        if ( n == ss.Length )
        {
            for ( m = i;m < 5;m++)
             {
               sl.Add(j);
              }            
         }
}

#14


int[] ss = new int[] { 1, 2, 3, 4, 5, 100 };
List sl = new List();
int i = 0;
int j = 1;
int n = 0;
int m;
while(i < 5)   // 5表示要找个数
{
        if (j != ss[n])//从1开始与该段数字第一比较,前提是以升序排好序的
        {//如果不相同
            sl.Add(j);//加入J
            j++;//J使用一次后自增
            i++;//加入一次后自增           
        }
        else
        {//如果相同
            j++;//J增加一次
            n++;//J增加后肯定大于先前数,所以应该和数字段内下一位数比较,n自增
        }
        if ( n == ss.Length )//如果比较完所有数都够满足,则在该数字段后补足不够的数
        {
            for ( m = i;m < 5;m++)
             {
               sl.Add(j);
              }            
         }
}

#15


//int[]numary 为传入的源数据
//max 最小不重复的的N个数
public static int[] getMinNum(int[]numary,int max)
{
Array.Sort(numary);
int count=0;
int[] min5num=new int[max];
for(int i=1;i< numary.Length;i++)
{
if(numary[i-1]<(numary[i]-1))
{
int tmp=numary[i-1]+1;
for(int j=0; j< (numary[i]-numary[i-1]-1);j++)
{
if(count!=max)
{
min5num[count]=tmp;
tmp++;
count++;
}
}
}
if(count==(max-1))break;
}
if(count!=max)
{
int itmp=1;
for(int j=count;j {
min5num[j]=numary[numary.Length-1]+itmp;
itmp++;
}
}
return min5num;
}

#16


测试通过

int[] ss = new int[] { 1, 2, 3, 4, 5 ,7};
int[] sl = new int[]{0,0,0,0,0};
int i = 0;
int j = 1;
int n = 0;
int m;
while(i < 5)   // 5表示要找个数
{
if (j != ss[n] )//从1开始与该段数字第一比较,前提是以升序排好序的
{//如果不相同
sl[i] = j;//加入J
j++;//J使用一次后自增
i++;//加入一次后自增           
}
else
{//如果相同
j++;//J增加一次
n++;//J增加后肯定大于先前数,所以应该和数字段内下一位数比较,n自增
}
if ( n == ss.Length )//如果比较完所有数都够满足,则在该数字段后补足不够的数
{
for ( m = i;m < 5;m++)
{
sl[m] = j;
j++;

break;
}
}
//显示数字
for ( int x = 0;x{
Console.WriteLine(sl[x].ToString());
}
Console.ReadLine();

#17


public static int[] getMinNum(int[]numary,int max)
这里没有设置最小开始位,既以排序后的numary[0]位最小位

添加参数minstart,设置最小开始位
public static int[] getMinNum(int[]numary,int max,int minstart)
{
Array.Sort(numary);
int count=0;
int[] min5num=new int[max];
int tmp=0;
if(minstart {
tmp=minstart;
for(int i=count;i {
if(count!=max)
{
min5num[count]=tmp;
tmp++;
count++;
}
}

}
for(int i=1;i< numary.Length;i++)
{
if(numary[i-1]<(numary[i]-1))
{
tmp=numary[i-1]+1;
for(int j=0; j< (numary[i]-numary[i-1]-1);j++)
{
if(count!=max)
{
min5num[count]=tmp;
tmp++;
count++;
}
}
}
if(count==(max-1))break;
}
if(count!=max)
{
tmp=1;
for(int j=count;j {
min5num[j]=numary[numary.Length-1]+tmp;
tmp++;
}
}
return min5num;
}

#18


如果表中已存在 10000个数字 , 1 , 2 , .... 10001 , 10003 
int[] ss = new int[] { 1, 2, 3, 4, 5 ,7}; //这句怎么写 ?

#19


jingtao_zhou(小熊) 的速度不错

#20


static void Main(string[] args)
{
   int[] temparr=new int[]{ 1 , 3 , 4 , 5 ,6 };
   ArrayList al=new ArrayList();
   //temparr.sort();
   int G=temparr[temparr.Length-1];
   int F=0;
   int count=5;
   int temp=1;
   int L=1;
   int M=0;
   int N=0;
   for(int i=1;i      {
for(M=temparr[i]-temparr[i-1];M>1;M--)
   {
     if (temp>count)
{break;}
     else
     {
F=temparr[i-1]+1;
al.Add(F+N);
N+=1;
temp+=1;
      }
   }
     }
   for(int k=temp;k<=count;k++)
      {
al.Add(G+L);
L+=1;
       }
}//输出al即可,时间关系,该代码还可以简化的.

#21


楼主大哥,干吗那么早结帖啊,郁闷中

#22


static void Main(string[] args)
{
   int[] temparr=new int[]{ 1 ,2, 3 , 4 , 5 ,100 };
   ArrayList al=new ArrayList();
   //temparr.sort;
   int G=temparr[temparr.Length-1];
   int F=0;
   int count=5;
   int temp=0;
   int L=1;
   int M=0;
   for(int i=1;i   {
       for(M=temparr[i]-temparr[i-1];M>1;M--)
{
   if (temp>count-1)
     {break;}
   else
     {
       F=temparr[i-1]+1;
     al.Add(F+temp);
     temp+=1;
      }
}
   }
   for(int k=temp;k    {
      al.Add(G+L);
      L+=1;
    }
}

推荐阅读
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
author-avatar
手机用户2502905381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有