2017-01-09 107 views
-2

我必須在未排序的序列中找到缺失的編號。這個序列存儲在一個String對象中。例如,在此序列中:3 1 6 5 2缺少的編號是4。 每個數字之間都有一個\n。我必須這樣做,而不使用數組,字典,列表等結構,因爲我需要具有O(1)複雜性。 在輸入我也收到序列的最大數量(在示例序列中,我收到數字6) 任何想法?在未排序的序列中查找缺少的編號

+0

向我們展示您的代碼或嘗試執行此問題的距離。 – Gatusko

+1

O(1)的複雜性只有在序列長度的上限纔有可能。否則,你會遇到O(n * log n)(即先排序並查找缺少的數字)。或者也許O(n)如果你不關心空間。 – Ctx

+0

比較序列的總和與最小值和最大值之間的整數之和。 –

回答

0

方法1(用求和公式) 算法:

  1. 獲取數字 的總和= N *(N + 1)/ 2 ----------- O(1)

2減去全部來自總和的數量和 你會得到失蹤人數

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); 

} 
+0

不應該你的大總數是n *((n + 1)/ 2) ? –

+0

比'arr [] = {1,3,4,5}'說'n = 4'比我們使用'n + 1'要好,因爲一個數字丟失了,所以總數是'5' –

+0

是的,說不允許使用陣列和最大數量給予。所以最大數量應該是n而不需要數組。 –