【问题标题】:Find missing number in a sequence not sorted在未排序的序列中查找缺失的数字
【发布时间】:2017-01-09 16:01:36
【问题描述】:

我必须在未排序的序列中找到缺失的数字。此序列存储在 String 对象中。例如,在此序列中:3 1 6 5 2 缺少的数字是 4。 每个数字之间都有一个\n。我必须在不使用数组、字典、列表等结构的情况下执行此操作,因为我需要 O(1) 复杂性。 在输入中,我还收到了序列的最大数量(在示例序列中,我收到了数字 6) 有什么想法吗?

【问题讨论】:

  • 向我们展示您的代码或您尝试解决此问题的程度。
  • O(1) 的复杂度只有在序列长度有上限的情况下才有可能。否则你会被 O(n*log n) 困住(即先排序并寻找丢失的数字)。或者如果你不关心空间,也许 O(n)。
  • 比较序列之和与最小值和最大值之间的整数之和。
  • @Ctx 我忘了说在输入中我也收到了序列的最大数量(在示例序列中,我收到了数字 6)

标签: java string numbers character complexity-theory


【解决方案1】:

方法一(使用求和公式) 算法:

  1. 获取数字的总和 总计 = n*(n+1)/2 ------------O(1)

2 从 sum 中减去所有数字和 你会得到丢失的号码

 void ans(int total){     ///O(1)

            big_total = (n+1)*(n+2)/2;  //  n+1 because 1 number is missing

            return (big_total-total);


     }




input_array()
{
  int n,total=0,i;

  cout<<"enter no of element";
  cin>>n;
  for(i=0;i<n;i++)
   {
     cin>>arr[i];
     total+=arr[i];
   }

   cout<<ans(total);

}

【讨论】:

  • 你的大总数不应该是 n*((n+1)/2) 吗?
  • 让我们说n=4arr[]={1,3,4,5} 比我们使用n+1 因为缺少一个数字所以总数是5
  • 是的,但问题是不允许使用数组并且最大数量是给定的。所以最大数量应该是 n 并且不需要数组。
猜你喜欢
  • 2021-05-25
  • 2017-11-07
  • 2012-07-08
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多