1. 程式人生 > 其它 >136. 只出現一次的數字 迴圈利用indexOf求解

136. 只出現一次的數字 迴圈利用indexOf求解

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]
        }
    }
};

解題思路

  1. 將陣列轉為set集合,set集合沒有重複項
  2. 對set集合每一項求和 sum1
  3. 對陣列求和 sum2
  4. 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;
};