[LeetCode 162]Find Peak Element

题目链接:find-peak-element

/** * A peak element is an element that is greater than its neighbors.Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.You may imagine that num[-1] = num[n] = -∞.For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.Note:Your solution should be in logarithmic complexity. * */public class FindPeakElement {//解法一//58 / 58 test cases passed.//Status: Accepted//Runtime: 214 ms//Submitted: 1 minute ago//时间复杂度:O(log(n)) static int peak = -1;public int findPeakElement(int[] num) {int len = num.length;if (len == 1)return 0;if (num[0] > num[1]) // 最左return 0;if (num[len – 1] > num[len – 2]) // 最右return len – 1;findPeakElement(num, 1, len – 2);return peak;}public void findPeakElement(int[] num, int left, int right) {if (left <= right) {int mid = (right + left) / 2;if (num[mid] > num[mid – 1] && num[mid] > num[mid + 1])peak = mid;else {findPeakElement(num, left, mid – 1);findPeakElement(num, mid + 1, right);}}}//解法二//58 / 58 test cases passed.//Status: Accepted//Runtime: 223 ms//Submitted: 0 minutes ago//时间复杂度 O(n) 空间复杂度 O(1) static int findPeakElement1(int[] num) {int len = num.length;if (len == 1)return 0;if (num[0] > num[1])//最左return 0;if (num[len – 1] > num[len – 2])//最右return len – 1;int i = 1;for (; i < len – 1; i++) {if (num[i] > num[i – 1] && num[i] < num[i + 1])break;}return i; }public static void main(String[] args) {System.out.println(findPeakElement1(new int[]{1, 2, 3, 1}));}}

,而有的旅行是释放负面情绪,换个心情,轻装上阵。

[LeetCode 162]Find Peak Element

相关文章:

你感兴趣的文章:

标签云: