[GeeksForGeeks] Find if there is a pair with a given sum in a sorted and rotated array.
Posted Push your limit!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[GeeksForGeeks] Find if there is a pair with a given sum in a sorted and rotated array.相关的知识,希望对你有一定的参考价值。
Given a sorted array, this array is rotated by some unknown times. Find if there is a pair in this array
that sums to a given value.
Solution 1. O(n * log n) runtime, sort this array then use two pointers to check if there is a pair.
Solution 2. O(n) runtime, rotate this array back to its sorted order then use two pointers to check if there is a pair.
How to rotate: first find the split point where the natural order is broke; then apply the 3-step rotation algorithm.
Solution 3. optimal: O(n) runtime, two pointers without modifying the given array.
1 public boolean checkPairSum(int[] arr, int target) { 2 if(arr == null || arr.length < 2) { 3 return false; 4 } 5 int end = 0, start = 0; 6 for(; end < arr.length - 1; end++) { 7 if(arr[end] > arr[end + 1]) { 8 break; 9 } 10 } 11 start = (end + 1) % arr.length; 12 while(start != end) { 13 int sum = arr[start] + arr[end]; 14 if(sum == target) { 15 return true; 16 } 17 else if(sum < target) { 18 start = (start + 1) % arr.length; 19 } 20 else { 21 end = (end - 1 + arr.length) % arr.length; 22 } 23 } 24 return false; 25 }
以上是关于[GeeksForGeeks] Find if there is a pair with a given sum in a sorted and rotated array.的主要内容,如果未能解决你的问题,请参考以下文章
[GeeksForGeeks] Find the largest pair sum in an unsorted array
[GeeksForGeeks] Print all nodes that don't have sibling in a binary tree.