iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
自我挑戰組

JavaScript - 30天 - 自學挑戰系列 第 15

LeetCode Js-169. Majority Element

  • 分享至 

  • xImage
  •  

LeetCode Js-169. Majority Element

Given an array nums of size n, return the majority element.
The majority element is the element that appears more than ⌊n / 2⌋ times.
You may assume that the majority element always exists in the array.LeetCode Js-169. Majority Element

給予一個陣列 nums 且長度為 n,回傳多數的元素。
多數的元素是一個有出現 n / 2以上次數的元素。
你可以假設多數的元素一直都存在陣列中,也就是找出符合次數為長度除以 2 的元素。

Example 1:

Input: nums = [3,2,3]
Output: 3

Solution:

  1. 如 nums 中只有一個元素時,回傳該元素的值。
  2. 宣告一個 box 物件。
  3. 進行 nums.length 長度的迴圈。
  4. 運用物件{}的特性,如果 box[i] 中沒有對應的物件,則顯示undefined,而 !undefined 為 false 轉為 true,執行對應物件次數為 {'i': 1}
    5-1. 如有 box[i] 存在物件中,則顯示次數,而 !1 的相反為 true 轉為 false,執行對應物件++ 為 {'i': 1 + 1}
    5-2. 如果該物件的次數大於 nums陣列的長度/2,則返回該數值。
var majorityElement = function(nums) {
  if (nums.length === 1) return nums[0]

  let box = {}

  for (let i = 0; i < nums.length; i++) {
    
    if (!box[nums[i]]) {
      box[nums[i]] = 1
    } else {
      box[nums[i]]++

      if (box[nums[i]] >= nums.length / 2) {
        return nums[i]
      }
    }
  }
};

FlowChart:
Example 1

Input: nums = [3,2,3]
nums.length = 3

step.1
i = 0
box = {}
!box[nums[0]] => !box[3] => !undefined = true
box[nums[0]] = 1 //{'3': 1}

i = 1
box = {'3': 1}
!box[nums[1]] => !box[2] => !undefined = true
box[nums[1]] = 1//{ '2': 1, '3': 1 }

i = 2
box = {'2': 1, '3': 1}
!box[nums[2]] => !box[3] => !1 => false
box[nums[2]]++ => {'2': 1, '3': 2}
(box[nums[2]] >= nums.length / 2) //{'3'} 2 >= (3/2)=> 2 >= 1.5
return nums[2] //3

上一篇
LeetCode Js-35. Search Insert Position
下一篇
LeetCode Js-119. Pascal's Triangle II
系列文
JavaScript - 30天 - 自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言