LeetCode符号化問題2020年/12/12-単番号


[質問]


Given a non-empty array of integers nums, every element appears twice except for one. Find that single one.
Follow up: Could you implement a solution with a linear runtime complexity and without using extra memory?

要約)要素に重複しない数字return.

[回答]

var singleNumber = function(nums) {
  const set = [...new Set(nums)];
  const length = set.length
   
  for(let i = 0; i < length; i++) {
    const index = nums.indexOf(set[i]);
       
    if(nums.indexOf(set[i], index + 1) < 0) return set[i];
  }
};
まず、setを使用して重複除外を行い、set要素のうち、numbs配列で最初に見つかったindexは、indexがなければreturnの数である.
var singleNumber = function(nums) {
  for(let i = 0; i < nums.length; i++) {
    const index = nums.indexOf(nums[i]);
       
    if(nums.indexOf(nums[i], index + 1) < 0) return nums[i];
  }
};
考えてみれば、setを書く必要はありません.自分でrefactoringを探すようにします.
var singleNumber = function(nums) {
  for(let i = 0; i < nums.length; i++) {
    if(nums.indexOf(nums[i], nums.indexOf(nums[i]) + 1) < 0) return nums[i];
  }
};
indexを別の変数に変えても1回しか使わないので削除してからもう少し短くします