@@ -423,6 +423,38 @@ let twoSumIITarget = 9
423423
424424Solution . twoSum ( nums: twoSumIINums, twoSumIITarget)
425425
426+ /**
427+ * 169. Majority Element
428+ * https://leetcode.com/problems/majority-element/
429+ */
430+
431+ extension Solution {
432+ class func majorityElement( nums: [ Int ] ? ) -> Int ? {
433+ guard let nums = nums, nums. count > 1 else { return nil }
434+
435+ var major = 0
436+ var count = 0
437+
438+ for num in nums {
439+ if ( count == 0 ) {
440+ major = num
441+ count += 1
442+ } else if ( major == num) {
443+ count += 1
444+ } else {
445+ count -= 1
446+ }
447+ }
448+
449+ return major
450+ }
451+ }
452+
453+ // usage
454+
455+ let majorityElementNums = [ 2 , 6 , 2 , 40 , 15 , 2 , 2 , 36 ]
456+ Solution . majorityElement ( nums: majorityElementNums)
457+
426458/**
427459 * 170. Two Sum III - Data structure design
428460 * https://leetcode.com/problems/two-sum-iii-data-structure-design
@@ -633,6 +665,66 @@ Solution.containsDuplicateII(nums: nums1, 3)
633665Solution . containsDuplicateII ( nums: nums1, 5 )
634666Solution . containsDuplicateII ( nums: nums2, 2 )
635667
668+ /**
669+ * 229. Majority Element II
670+ * https://leetcode.com/problems/majority-element-ii/
671+ */
672+
673+ extension Solution {
674+ class func majorityElementII( nums: [ Int ] ? ) -> [ Int ] ? {
675+ guard let nums = nums, nums. count > 1 else { return nil }
676+
677+ var count1 = 0
678+ var count2 = 0
679+ var candidate1 = 0
680+ var candidate2 = 0
681+ var res = [ Int] ( )
682+
683+ for num in nums {
684+ if ( num == candidate1) {
685+ count1 += 1
686+ } else if ( num == candidate2) {
687+ count2 += 1
688+ } else if ( count1 == 0 ) {
689+ candidate1 = num
690+ count1 = 1
691+ } else if ( count2 == 0 ) {
692+ candidate2 = num
693+ count2 = 1
694+ } else {
695+ count1 -= 1
696+ count2 -= 1
697+ }
698+ }
699+
700+ count1 = 0
701+ count2 = 0
702+
703+ for num in nums {
704+ if num == candidate1 {
705+ count1 += 1
706+ }
707+ if num == candidate2 {
708+ count2 += 1
709+ }
710+ }
711+
712+ if count1 > nums. count / 3 {
713+ res. append ( candidate1)
714+ }
715+ if count2 > nums. count / 3 {
716+ res. append ( candidate2)
717+ }
718+
719+ return res
720+ }
721+ }
722+
723+ // usage
724+
725+ let majorityElementIINums = [ 1 , 3 , 7 , 1 , 1 , 8 , 3 , 2 , 1 ]
726+ Solution . majorityElementII ( nums: majorityElementIINums)
727+
636728/**
637729 * 259. 3Sum Smaller
638730 * https://leetcode.com/problems/3sum-smaller
0 commit comments