public class Substring { public static void maxBitonicSubstring(int[] arr) { //longest increasing subarray int[] increase = new int[arr.length]; increase[0] = 1; for (int i = 1; i < arr.length; i++) { increase[i] = 1; if (arr[i - 1] < arr[i]) { increase[i] = increase[i - 1] + 1; } } //longest decreasing subarray int[] decrease = new int[arr.length]; decrease[arr.length - 1] = 1; for (int i = arr.length - 2; i >= 0; i--) { decrease[i] = 1; if (arr[i] > arr[i + 1]) { decrease[i] = decrease[i + 1] + 1; } } //find max Bitonic subarray int maxLen = 1; int start = 0, end = 0; for (int i = 0; i < arr.length; i++) { if (maxLen < increase[i] + decrease[i] - 1) { maxLen = increase[i] + decrease[i] - 1; start = i - increase[i] + 1; end = i + decrease[i] - 1; } } //return array int[] bitonic = new int[end - start + 1]; for (int i = start; i <= end; i++) { System.out.print(arr[i] + " "); } } public static void main(String[] args) { int[] A = { 3, 5, 8, 4, 5, 9, 10, 8, 5, 3, 4 }; maxBitonicSubstring(A); } }
We use cookies to provide and improve our services. By using our site, you consent to our Cookies Policy. Accept Learn more