在乙個長度為n的陣列裡的所有數字都在0到n-1的範圍內。 陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中第乙個重複的數字。 例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。
返回描述:
如果陣列中有重複的數字,函式返回true,否則返回false。
如果陣列中有重複的數字,把重複的數字放到引數duplication[0]中。(ps:duplication已經初始化,可以直接賦值使用。)
演算法流程:
初始化: 新建 \(map\) ,記為 \(dic\) ;
遍歷陣列 \(nums\) 中的每個數字 \(num\) :
當 \(num\) 在 \(dic\) 中,說明重複,返回 \(num\) ;
將 \(num\) 新增至 \(dic\) 中;
返回 \(false\) 。
/**
1.時間複雜度:o(n)
2.空間複雜度:o(n)
**/class solution
}return false;
}};
演算法思想:
利用現有陣列設定標誌,當乙個數字被訪問過後,設定該數字對應索引的數值 \(-n\)
當再次遇到相同數字時,會發現該數字對應索引上的數值已經小於0,直接返回這個數即可。
演算法流程:
遍歷陣列 \(numbers\) 的每個數字 \(num\)
設定索引 \(index\) 為 \(num\)
當 \(index<0\) 時,將 \(index\) 加 \(n\) 作為索引,保證 \(index\) 始終為初始值
當 \(numbers[index]>=0\) 時,將 \(numbers[index]\) 減 \(n\),由於每個數字 \(num\) 保證在 \([0,n-1]\),所以一定有 \(numbers[index]<0\) ,代表 \(index\) 已經被訪問過
當 \(numbers[index]<0\) 時,說明 \(index\) 指向的該數字之前已經被訪問過,返回 \(index\) 即可
返回 \(false\) ,沒有找到該數字
/**
1.時間複雜度:o(n)
2.空間複雜度:o(1)
**/class solution
if (numbers[index] >= 0)
else
}return false;
}};
劍指offer 50 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。這道題是比較基礎,主要思路如下 首先判斷陣列是否為空,若為空直接返回...
劍指Offer(50) 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。1 將陣列連線成字串變數stringbuilder 2 按位遍歷字串...
劍指offer 50 陣列中重複的數字
在乙個長度為n的陣列裡的所有數字都在0到n 1的範圍內。陣列中某些數字是重複的,但不知道有幾個數字是重複的。也不知道每個數字重複幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的陣列,那麼對應的輸出是第乙個重複的數字2。思路 解法一 雜湊表 時間o n 空間o n class solut...