Design Pattern 12: Modified Binary Search | Problem: Find Peak Element
This commit is contained in:
		
							parent
							
								
									73dc9e2272
								
							
						
					
					
						commit
						65d8e73a0a
					
				
							
								
								
									
										53
									
								
								12_find_peak_element.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								12_find_peak_element.cpp
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
/* Problem: https://leetcode.com/problems/find-peak-element/
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
 | 
			
		||||
int solution(const std::vector<int> &nums) {
 | 
			
		||||
  if (nums.size() == 0) {
 | 
			
		||||
    return -1;
 | 
			
		||||
  }
 | 
			
		||||
  if (nums.size() == 1) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  };
 | 
			
		||||
  long long first = 0, last = nums.size() - 1, pi = last / 2;
 | 
			
		||||
  while (true) {
 | 
			
		||||
    if (pi == 0) {
 | 
			
		||||
      if (nums[pi] > nums[pi + 1]) {
 | 
			
		||||
        return pi;
 | 
			
		||||
      } else {
 | 
			
		||||
        first = pi + 1;
 | 
			
		||||
        pi = ((last - first) / 2) + first;
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
    } else if (pi == (long long)nums.size() - 1) {
 | 
			
		||||
      if (nums[pi] > nums[pi - 1]) {
 | 
			
		||||
        return pi;
 | 
			
		||||
      } else {
 | 
			
		||||
        last = pi - 1;
 | 
			
		||||
        pi = ((last - first) / 2) + first;
 | 
			
		||||
        continue;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    if (nums[pi] < nums[pi - 1]) {
 | 
			
		||||
      last = pi - 1;
 | 
			
		||||
    } else if (nums[pi] < nums[pi + 1]) {
 | 
			
		||||
      first = pi + 1;
 | 
			
		||||
    } else {
 | 
			
		||||
      return pi;
 | 
			
		||||
    }
 | 
			
		||||
    pi = ((last - first) / 2) + first;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return pi;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
  std::vector<int> nums1 = {1, 2, 3, 1}, nums2 = {1, 2, 1, 3, 5, 6, 4};
 | 
			
		||||
  int i1, i2;
 | 
			
		||||
  i1 = solution(nums1);
 | 
			
		||||
  std::cout << i1 << " : " << nums1[i1] << '\n';
 | 
			
		||||
  i2 = solution(nums2);
 | 
			
		||||
  std::cout << i2 << " : " << nums2[i2] << '\n';
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user