Find an element in an array such that elements form a strictly decreasing and increasing sequence

Given an array of positive integers, the task is to find a point/element up to which elements form a strictly decreasing sequence first followed by a sequence of strictly increasing integers.
- Both of the sequences must at least be of length 2 (considering the common element).
- The last value of the decreasing sequence is the first value of the increasing sequence.
Note: Print “No such element exist”, if not found.
Examples:
Input: arr[] = {3, 2, 1, 2}
Output: 1
{3, 2, 1} is strictly decreasing
then {1, 2} is strictly increasing.
Input: arr[] = {3, 2, 1}
Output: No such element exist
Approach:
- First start traversing the array and keep traversing till the elements are in strictly decreasing order.
- If next elements is greater than the previous element store that element in point variable.
- Start traversing the elements from that point and keep traversing till the elements are in the strictly increasing order.
- After step 3, if all the elements get traversed then print that point.
- Else print “No such element exist.”
Note: If any of the two elements are equal then also print “No such element exist” as it should be strictly decreasing and increasing.
Below is the implementation of above approach:
C++
// C++ implementation of above approach#include <bits/stdc++.h>using namespace std;// Function to check such sequenceint findElement(int a[], int n){ // set increasing/decreasing sequence counter to 1 int inc = 1, dec = 1, point; // for loop counter from 1 to last index of list for (int i = 1; i < n; i++) { // check if current int is // smaller than previous int if (a[i] < a[i - 1]) { // if inc is 1, i.e., increasing // seq. never started if (inc == 1) // increase dec by 1 dec++; else return -1; } // check if current int is greater than previous int else if (a[i] > a[i - 1]) { // if inc is 1, i.e., increasing seq. // starting for first time, if (inc == 1) // store a[i-1] in point point = a[i - 1]; // only if decreasing seq. minimum // count has been met, if (dec >= 2) // increase inc by 1 inc++; else // return -1 as decreasing seq. // min. count must be 2 return -1; } // check if current int is equal // to previous int, if so, else if (a[i] == a[i - 1]) return -1; } // check if inc >= 2 and dec >= 2 // return point if (inc >= 2 && dec >= 2) return point; // otherwise return -1 else return -1;}// Driver codeint main(){ int arr[] = { 3, 2, 1, 2 }; int n = sizeof(arr) / sizeof(arr[0]); int ele = findElement(arr, n); if (ele == -1) cout << "No such element exist"; else cout << ele; return 0;} |
Java
// Java implementation of above approach public class GFG { // Function to check such sequence static int findElement(int a[], int n) { // set increasing/decreasing sequence counter to 1 int inc = 1, dec = 1, point = 0; // for loop counter from 1 to last index of list for (int i = 1; i < n; i++) { // check if current int is // smaller than previous int if (a[i] < a[i - 1]) { // if inc is 1, i.e., increasing // seq. never started if (inc == 1) // increase dec by 1 dec++; else return -1; } // check if current int is greater than previous int else if (a[i] > a[i - 1]) { // if inc is 1, i.e., increasing seq. // starting for first time, if (inc == 1) // store a[i-1] in point point = a[i - 1]; // only if decreasing seq. minimum // count has been met, if (dec >= 2) // increase inc by 1 inc++; else // return -1 as decreasing seq. // min. count must be 2 return -1; } // check if current int is equal // to previous int, if so, else if (a[i] == a[i - 1]) return -1; } // check if inc >= 2 and dec >= 2 // return point if (inc >= 2 && dec >= 2) return point; // otherwise return -1 else return -1; } // Driver code public static void main(String args[]) { int arr[] = { 3, 2, 1, 2 }; int n = arr.length ; int ele = findElement(arr, n); if (ele == -1) System.out.println("No such element exist"); else System.out.println(ele); } // This Code is contributed by ANKITRAI1} |
Python
# Python implementation of above approachdef findElement(a, n): # set increasing sequence counter to 1 inc = 1 # set decreasing sequence counter to 1 dec = 1 # for loop counter from 1 to last # index of list [len(array)-1] for i in range(1, n): # check if current int is smaller than previous int if(a[i] < a[i-1]): # if inc is 1, i.e., increasing seq. never started, if inc == 1: # increase dec by 1 dec = dec + 1 else: # return -1 since if increasing seq. has started, # there cannot be a decreasing seq. in a valley return -1 # check if current int is greater than previous int elif(a[i] > a[i-1]): # if inc is 1, i.e., increasing seq. # starting for first time, if inc == 1: # store a[i-1] in point point = a[i-1] # only if decreasing seq. minimum count has been met, if dec >= 2: # increase inc by 1 inc = inc + 1 else: # return -1 as decreasing seq. min. count must be 2 return -1 # check if current int is equal to previous int, if so, elif(a[i] == a[i-1]): # return false as valley is always # strictly increasing / decreasing return -1 # check if inc >= 2 and dec >= 2, if(inc >= 2 and dec >= 2): # return point return point else: # otherwise return -1 return -1a = [2, 1, 2]n = len(a)ele = findElement(a, n)if ( ele == -1 ): print("No such element exist")else: print(ele) |
C#
// C# implementation of above approach using System;class GFG {// Function to check such sequence static int findElement(int []a, int n) { // set increasing/decreasing // sequence counter to 1 int inc = 1, dec = 1, point = 0; // for loop counter from 1 to // last index of list for (int i = 1; i < n; i++) { // check if current int is // smaller than previous int if (a[i] < a[i - 1]) { // if inc is 1, i.e., increasing // seq. never started if (inc == 1) // increase dec by 1 dec++; else return -1; } // check if current int is greater // than previous int else if (a[i] > a[i - 1]) { // if inc is 1, i.e., increasing // seq. starting for first time, if (inc == 1) // store a[i-1] in point point = a[i - 1]; // only if decreasing seq. // minimum count has been met, if (dec >= 2) // increase inc by 1 inc++; else // return -1 as decreasing // seq. min. count must be 2 return -1; } // check if current int is equal // to previous int, if so, else if (a[i] == a[i - 1]) return -1; } // check if inc >= 2 and // dec >= 2, return point if (inc >= 2 && dec >= 2) return point; // otherwise return -1 else return -1; } // Driver codepublic static void Main(){ int []arr = { 3, 2, 1, 2 }; int n = arr.Length ; int ele = findElement(arr, n); if (ele == -1) Console.WriteLine("No such element exist"); else Console.WriteLine(ele); }}// This code is contributed by Shashank |
PHP
<?php // PHP implementation of above approach// Function to check such sequencefunction findElement(&$a, $n){ // set increasing/decreasing // sequence counter to 1 $inc = 1; $dec = 1; // for loop counter from 1 // to last index of list for ($i = 1; $i < $n; $i++) { // check if current int is // smaller than previous int if ($a[$i] < $a[$i - 1]) { // if inc is 1, i.e., increasing // seq. never started if ($inc == 1) // increase dec by 1 $dec++; else return -1; } // check if current int is greater // than previous int else if ($a[$i] > $a[$i - 1]) { // if inc is 1, i.e., increasing // seq. starting for first time, if ($inc == 1) // store a[i-1] in point $point = $a[$i - 1]; // only if decreasing seq. // minimum count has been met, if ($dec >= 2) // increase inc by 1 $inc++; else // return -1 as decreasing // seq. min. count must be 2 return -1; } // check if current int is equal // to previous int, if so, else if ($a[$i] == $a[$i - 1]) return -1; } // check if inc >= 2 and // dec >= 2, return point if ($inc >= 2 && $dec >= 2) return $point; // otherwise return -1 else return -1;}// Driver code$arr = array(3, 2, 1, 2);$n = sizeof($arr);$ele = findElement($arr, $n);if ($ele == -1) echo "No such element exist";else echo $ele;// This code is contributed // by ChitraNayal?> |
Javascript
<script>// Java Script implementation of above approach // Function to check such sequence function findElement(a,n) { // set increasing/decreasing sequence counter to 1 let inc = 1, dec = 1, point = 0; // for loop counter from 1 to last index of list for (let i = 1; i < n; i++) { // check if current int is // smaller than previous int if (a[i] < a[i - 1]) { // if inc is 1, i.e., increasing // seq. never started if (inc == 1) // increase dec by 1 dec++; else return -1; } // check if current int is greater than previous int else if (a[i] > a[i - 1]) { // if inc is 1, i.e., increasing seq. // starting for first time, if (inc == 1) // store a[i-1] in point point = a[i - 1]; // only if decreasing seq. minimum // count has been met, if (dec >= 2) // increase inc by 1 inc++; else // return -1 as decreasing seq. // min. count must be 2 return -1; } // check if current int is equal // to previous int, if so, else if (a[i] == a[i - 1]) return -1; } // check if inc >= 2 and dec >= 2 // return point if (inc >= 2 && dec >= 2) return point; // otherwise return -1 else return -1; } // Driver code let arr = [3, 2, 1, 2 ]; let n = arr.length ; let ele = findElement(arr, n); if (ele == -1) document.write("No such element exist"); else document.write(ele); // This code is contributed by sravan kumar Gottumukkala</script> |
Output
1
Complexity Analysis:
- Time Complexity: O(n)
- Auxiliary Space: O(1)
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



