@@ -423,6 +423,38 @@ let twoSumIITarget = 9
423
423
424
424
Solution . twoSum ( nums: twoSumIINums, twoSumIITarget)
425
425
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
+
426
458
/**
427
459
* 170. Two Sum III - Data structure design
428
460
* https://leetcode.com/problems/two-sum-iii-data-structure-design
@@ -633,6 +665,66 @@ Solution.containsDuplicateII(nums: nums1, 3)
633
665
Solution . containsDuplicateII ( nums: nums1, 5 )
634
666
Solution . containsDuplicateII ( nums: nums2, 2 )
635
667
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
+
636
728
/**
637
729
* 259. 3Sum Smaller
638
730
* https://leetcode.com/problems/3sum-smaller
0 commit comments