分治:两重递归,在归中操作。
class Solution {
int range(vector<int>& nums, int target, int lo, int hi){
int count = 0;
for(int i=lo; i<=hi; i++){
if(nums[i] == target)
count++;
}
return count;
}
int rank(vector<int>& nums, int lo,int hi){
if(lo == hi){
return nums[lo];
}
int mid = (lo + hi) / 2;
int left_majority = rank(nums, lo, mid);
int right_majority = rank(nums, mid + 1, hi);
if (range(nums, left_majority, lo, hi) > (hi - lo + 1) / 2)
return left_majority;
if (range(nums, right_majority, lo, hi) > (hi - lo + 1) / 2)
return right_majority;
return -1;
}
public:
int majorityElement(vector<int>& nums) {
return rank(nums, 0, nums.size() - 1);
}
};
哈希:
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int, int> counts;
int majority = 0, cnt = 0;
for (int num: nums) {
++counts[num];
if (counts[num] > cnt) {
majority = num;
cnt = counts[num];
}
}
return majority;
}
};
分治没看明白,用动态规划
func maxSubArray(nums []int) int {
max := nums[0]
for i := 1; i < len(nums); i++ {
if nums[i] + nums[i-1] > nums[i] {
nums[i] += nums[i-1]
}
if nums[i] > max {
max = nums[i]
}
}
return max
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/maximum-subarray/solution/zui-da-zi-xu-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。