136. 只出現一次的數字 迴圈利用indexOf求解
阿新 • • 發佈:2021-12-23
136. 只出現一次的數字 迴圈利用indexOf求解
檢視原題
解題思路
這種方法時間複雜度較高
利用indexOf方法判斷陣列當前項在前後是否還能找到與他一樣的數,如果不能找到,這個數即為所求。
程式碼
/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { const length = nums.length; for (let i = 0; i < length; i++) { if (nums.indexOf(nums[i], i + 1) === -1 && nums.indexOf(nums[i]) === i) { return nums[i] } } };
解題思路
- 將陣列轉為set集合,set集合沒有重複項
- 對set集合每一項求和 sum1
- 對陣列求和 sum2
- set集合的和sum1表示陣列不重複項的和,乘以2再減去sum2即為那個只出現一次的數
程式碼
/** * @param {number[]} nums * @return {number} */ var singleNumber = function(nums) { const set = new Set(nums); //將nums轉為集合 let sum1 = 0; //求set集合各項的和 let sum2 = 0; //求陣列的各項和 for (const item of set) { sum1 += item; } nums.forEach(vaule => { sum2 += vaule; }) return (2 * sum1) - sum2; };