Leetcode 분치법
4943 단어 leetcode문제 풀이 사고방식
분치법
분치법의 사상은 문제를 분치한다.문제를 작은 문제로 나누다2.분치가 끝난 후, 귀속 중의 종료 판정 문장을 촉발한다.분치의 결과를 한데 합치다
majority 를 구하다
제목
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.
You may assume that the array is non-empty and the majority element always exist in the array.
해석
majority는 수조에서 n/2회보다 크기 때문에 수조를 반으로 나누어 왼쪽 부분의 대다수와 오른쪽 부분의 대다수를 구할 수 있다. 그러면 문제를 나누어 해결할 수 있다.
merge 부분에서 수조는 그 횟수가 아니라 대부분의 원소만 되돌릴 수 있기 때문에 merge는 두 개의 횟수를 비교하고 비교적 큰 것을 되돌려야 한다.
소스 코드
class Solution {
public:
int majorityElement(vector<int>& nums) {
/*
left right , me
,
*/
return majorCompute(nums, 0, nums.size() - 1);
}
int majorCompute(vector<int>& nums, int left, int right) {
if (left >= right)
return nums[left];
int mid = (left + right) / 2;
int l = majorCompute(nums, left, mid);
int r = majorCompute(nums, mid + 1, right);
if (l == r)
return l;
else
return count(nums.begin() + left, nums.begin() + mid, l) > count(nums.begin() + mid, nums.begin() + right, r)? l: r;
}
};
큰 수를 구하다
제목
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element. For example, Given [3,2,1,5,6,4] and k = 2, return 5.
해석
이 문제는 가장 좋은 정렬 방법을 사용한다면 시간 복잡도는 O(nlogn)에 도달할 수 있다. 예를 들어 정렬을 쌓는 것이다.
그러나 k대 문제는 전형적인 분치 사상을 운용하여 해결할 수 있는 문제이다.
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
if (nums.size() == 1)
return nums[0];
vector<int> Sl, Sv, Sg;
// v
int v = nums[nums.size() / 2];
//
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == v)
Sv.push_back(nums[i]);
else if (nums[i] < v)
Sl.push_back(nums[i]);
else
Sg.push_back(nums[i]);
}
if (k <= Sg.size())
return findKthLargest(Sg, k);
else if (k <= Sg.size() + Sv.size())
return v;
else
return findKthLargest(Sl, k - Sg.size() - Sv.size());
// sort(nums.begin(), nums.end());
// return nums[nums.size() - k];
}
};
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
0부터 시작하는 LeetCode Day8 「1302. Deepest Leaves Sum」해외에서는 엔지니어의 면접에 있어서 코딩 테스트라고 하는 것이 행해지는 것 같고, 많은 경우, 특정의 함수나 클래스를 주제에 따라 실장한다고 하는 것이 메인이다. 빠른 이야기가 본고장에서도 행해지고 있는 것 같은 코...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.