Skip to main content

Check if an subarray is a form of hill

Here given code implementation process.

/*
    C program for
    Check if an subarray is a form of hill
*/
#include <stdio.h>

// Display given array elements
void printArray(int arr[], int n)
{
	printf("\n");
	for (int i = 0; i < n; ++i)
	{
		printf(" %d", arr[i]);
	}
}
void isHill(int arr[], int n, int s, int e)
{
	if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
	{
		return;
	}
	// Use to collect position of adjacent increasing element
	// From left to right
	int left[n];
	// Use to collect position of adjacent decreasing element
	// From right to left
	int right[n];
	int position = 0;
	// Set inital value
	// Set first value of array left
	left[0] = 0;
	// Set last value of array right
	right[n - 1] = n - 1;
	// Collects adjacent position of increasing order element
	for (int i = 1; i < n; ++i)
	{
		if (arr[i] > arr[i - 1])
		{
			position = i;
		}
		left[i] = position;
	}
	position = n - 1;
	// Collects adjacent position of decreasing order element
	for (int i = n - 2; i >= 0; --i)
	{
		if (arr[i] > arr[i + 1])
		{
			position = i;
		}
		right[i] = position;
	}
	if (right[s] >= left[e])
	{
		printf("\n Subarray (%d-%d) is in hill form ", s, e);
	}
	else
	{
		printf("\n Subarray (%d-%d) is not in hill form ", s, e);
	}
}
int main(int argc, char
	const *argv[])
{
	int arr1[] = {
		5 , 2 , 4 , 1 , 6 , 3 , 2
	};
	int arr2[] = {
		7 , 8 , 9 , 4 , 6 , 5 , 2 , 3
	};
	int n = sizeof(arr1) / sizeof(arr1[0]);
	printArray(arr1, n);
	//  s = 2  e = 4
	isHill(arr1, n, 2, 4);
	//  s = 1  e = 3
	isHill(arr1, n, 1, 3);
	// Check arr2
	n = sizeof(arr2) / sizeof(arr2[0]);
	printArray(arr2, n);
	//  s = 1  e = 5
	isHill(arr2, n, 1, 5);
	//  s = 5  e = 7
	isHill(arr2, n, 5, 7);
	//  s = 3  e = 5
	isHill(arr2, n, 3, 5);
	return 0;
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
/*
    Java program for
    Check if an subarray is a form of hill
*/
public class Mount
{
	// Display given array elements
	public void printArray(int[] arr, int n)
	{
		System.out.print("\n");
		for (int i = 0; i < n; ++i)
		{
			System.out.print(" " + arr[i]);
		}
	}
	public void isHill(int[] arr, int n, int s, int e)
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		int[] left = new int[n];
		// Use to collect position of adjacent decreasing element
		// From right to left
		int[] right = new int[n];
		int position = 0;
		// Set inital value
		// Set first value of array left
		left[0] = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		// Collects adjacent position of increasing order element
		for (int i = 1; i < n; ++i)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
		}
		position = n - 1;
		// Collects adjacent position of decreasing order element
		for (int i = n - 2; i >= 0; --i)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
		}
		if (right[s] >= left[e])
		{
			System.out.print("\n Subarray (" + 
                             s + "-" + e + ") is in hill form ");
		}
		else
		{
			System.out.print("\n Subarray (" + 
                             s + "-" + e + ") is not in hill form ");
		}
	}
	public static void main(String[] args)
	{
		Mount task = new Mount();
		int[] arr1 = {
			5 , 2 , 4 , 1 , 6 , 3 , 2
		};
		int[] arr2 = {
			7 , 8 , 9 , 4 , 6 , 5 , 2 , 3
		};
		int n = arr1.length;
		task.printArray(arr1, n);
		//  s = 2  e = 4
		task.isHill(arr1, n, 2, 4);
		//  s = 1  e = 3
		task.isHill(arr1, n, 1, 3);
		// Check arr2
		n = arr2.length;
		task.printArray(arr2, n);
		//  s = 1  e = 5
		task.isHill(arr2, n, 1, 5);
		//  s = 5  e = 7
		task.isHill(arr2, n, 5, 7);
		//  s = 3  e = 5
		task.isHill(arr2, n, 3, 5);
	}
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
// Include header file
#include <iostream>
using namespace std;
/*
    C++ program for
    Check if an subarray is a form of hill
*/
class Mount
{
	public:
		// Display given array elements
		void printArray(int arr[], int n)
		{
			cout << "\n";
			for (int i = 0; i < n; ++i)
			{
				cout << " " << arr[i];
			}
		}
	void isHill(int arr[], int n, int s, int e)
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		int left[n];
		// Use to collect position of adjacent decreasing element
		// From right to left
		int right[n];
		int position = 0;
		// Set inital value
		// Set first value of array left
		left[0] = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		// Collects adjacent position of increasing order element
		for (int i = 1; i < n; ++i)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
		}
		position = n - 1;
		// Collects adjacent position of decreasing order element
		for (int i = n - 2; i >= 0; --i)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
		}
		if (right[s] >= left[e])
		{
			cout << "\n Subarray (" 
          		 << s << "-" << e << ") is in hill form ";
		}
		else
		{
			cout << "\n Subarray (" 
          		 << s << "-" << e << ") is not in hill form ";
		}
	}
};
int main()
{
	Mount *task = new Mount();
	int arr1[] = {
		5 , 2 , 4 , 1 , 6 , 3 , 2
	};
	int arr2[] = {
		7 , 8 , 9 , 4 , 6 , 5 , 2 , 3
	};
	int n = sizeof(arr1) / sizeof(arr1[0]);
	task->printArray(arr1, n);
	//  s = 2  e = 4
	task->isHill(arr1, n, 2, 4);
	//  s = 1  e = 3
	task->isHill(arr1, n, 1, 3);
	// Check arr2
	n = sizeof(arr2) / sizeof(arr2[0]);
	task->printArray(arr2, n);
	//  s = 1  e = 5
	task->isHill(arr2, n, 1, 5);
	//  s = 5  e = 7
	task->isHill(arr2, n, 5, 7);
	//  s = 3  e = 5
	task->isHill(arr2, n, 3, 5);
	return 0;
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
// Include namespace system
using System;
/*
    Csharp program for
    Check if an subarray is a form of hill
*/
public class Mount
{
	// Display given array elements
	public void printArray(int[] arr, int n)
	{
		Console.Write("\n");
		for (int i = 0; i < n; ++i)
		{
			Console.Write(" " + arr[i]);
		}
	}
	public void isHill(int[] arr, int n, int s, int e)
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		int[] left = new int[n];
		// Use to collect position of adjacent decreasing element
		// From right to left
		int[] right = new int[n];
		int position = 0;
		// Set inital value
		// Set first value of array left
		left[0] = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		// Collects adjacent position of increasing order element
		for (int i = 1; i < n; ++i)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
		}
		position = n - 1;
		// Collects adjacent position of decreasing order element
		for (int i = n - 2; i >= 0; --i)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
		}
		if (right[s] >= left[e])
		{
			Console.Write("\n Subarray (" + 
                          s + "-" + e + ") is in hill form ");
		}
		else
		{
			Console.Write("\n Subarray (" + 
                          s + "-" + e + ") is not in hill form ");
		}
	}
	public static void Main(String[] args)
	{
		Mount task = new Mount();
		int[] arr1 = {
			5 , 2 , 4 , 1 , 6 , 3 , 2
		};
		int[] arr2 = {
			7 , 8 , 9 , 4 , 6 , 5 , 2 , 3
		};
		int n = arr1.Length;
		task.printArray(arr1, n);
		//  s = 2  e = 4
		task.isHill(arr1, n, 2, 4);
		//  s = 1  e = 3
		task.isHill(arr1, n, 1, 3);
		// Check arr2
		n = arr2.Length;
		task.printArray(arr2, n);
		//  s = 1  e = 5
		task.isHill(arr2, n, 1, 5);
		//  s = 5  e = 7
		task.isHill(arr2, n, 5, 7);
		//  s = 3  e = 5
		task.isHill(arr2, n, 3, 5);
	}
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
package main
import "fmt"
/*
    Go program for
    Check if an subarray is a form of hill
*/

// Display given array elements
func printArray(arr[] int, n int) {
	fmt.Print("\n")
	for i := 0 ; i < n ; i++ {
		fmt.Print(" ", arr[i])
	}
}
func isHill(arr[] int, n int, s int, e int) {
	if n <= 2 || s < 0 || s >= e || e < 0 || e >= n {
		return
	}
	// Use to collect position of adjacent increasing element
	// From left to right
	var left = make([] int, n)
	// Use to collect position of adjacent decreasing element
	// From right to left
	var right = make([] int, n)
	var position int = 0
	// Set last value of array right
	right[n - 1] = n - 1
	// Collects adjacent position of increasing order element
	for i := 1 ; i < n ; i++ {
		if arr[i] > arr[i - 1] {
			position = i
		}
		left[i] = position
	}
	position = n - 1
	// Collects adjacent position of decreasing order element
	for i := n - 2 ; i >= 0 ; i-- {
		if arr[i] > arr[i + 1] {
			position = i
		}
		right[i] = position
	}
	if right[s] >= left[e] {
		fmt.Print("\n Subarray (", s, "-", e, ") is in hill form ")
	} else {
		fmt.Print("\n Subarray (", s, "-", e, ") is not in hill form ")
	}
}
func main() {

	var arr1 = [] int{5 , 2 , 4 , 1 , 6 , 3 , 2 }
	var arr2 = [] int{ 7 , 8 , 9 , 4 , 6 , 5 , 2 , 3}
	var n int = len(arr1)
	printArray(arr1, n)
	//  s = 2  e = 4
	isHill(arr1, n, 2, 4)
	//  s = 1  e = 3
	isHill(arr1, n, 1, 3)
	// Check arr2
	n = len(arr2)
	printArray(arr2, n)
	//  s = 1  e = 5
	isHill(arr2, n, 1, 5)
	//  s = 5  e = 7
	isHill(arr2, n, 5, 7)
	//  s = 3  e = 5
	isHill(arr2, n, 3, 5)
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
<?php
/*
    Php program for
    Check if an subarray is a form of hill
*/
class Mount
{
	// Display given array elements
	public	function printArray($arr, $n)
	{
		echo("\n");
		for ($i = 0; $i < $n; ++$i)
		{
			echo(" ".$arr[$i]);
		}
	}
	public	function isHill($arr, $n, $s, $e)
	{
		if ($n <= 2 || $s < 0 || $s >= $e || $e < 0 || $e >= $n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		$left = array_fill(0, $n, 0);
		// Use to collect position of adjacent decreasing element
		// From right to left
		$right = array_fill(0, $n, 0);
		$position = 0;
		// Set last value of array right
		$right[$n - 1] = $n - 1;
		// Collects adjacent position of increasing order element
		for ($i = 1; $i < $n; ++$i)
		{
			if ($arr[$i] > $arr[$i - 1])
			{
				$position = $i;
			}
			$left[$i] = $position;
		}
		$position = $n - 1;
		// Collects adjacent position of decreasing order element
		for ($i = $n - 2; $i >= 0; --$i)
		{
			if ($arr[$i] > $arr[$i + 1])
			{
				$position = $i;
			}
			$right[$i] = $position;
		}
		if ($right[$s] >= $left[$e])
		{
			echo("\n Subarray (".$s.
				"-".$e.
				") is in hill form ");
		}
		else
		{
			echo("\n Subarray (".$s.
				"-".$e.
				") is not in hill form ");
		}
	}
}

function main()
{
	$task = new Mount();
	$arr1 = array(5, 2, 4, 1, 6, 3, 2);
	$arr2 = array(7, 8, 9, 4, 6, 5, 2, 3);
	$n = count($arr1);
	$task->printArray($arr1, $n);
	//  s = 2  e = 4
	$task->isHill($arr1, $n, 2, 4);
	//  s = 1  e = 3
	$task->isHill($arr1, $n, 1, 3);
	// Check arr2
	$n = count($arr2);
	$task->printArray($arr2, $n);
	//  s = 1  e = 5
	$task->isHill($arr2, $n, 1, 5);
	//  s = 5  e = 7
	$task->isHill($arr2, $n, 5, 7);
	//  s = 3  e = 5
	$task->isHill($arr2, $n, 3, 5);
}
main();

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
/*
    Node JS program for
    Check if an subarray is a form of hill
*/
class Mount
{
	// Display given array elements
	printArray(arr, n)
	{
		process.stdout.write("\n");
		for (var i = 0; i < n; ++i)
		{
			process.stdout.write(" " + arr[i]);
		}
	}
	isHill(arr, n, s, e)
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		var left = Array(n).fill(0);
		// Use to collect position of adjacent decreasing element
		// From right to left
		var right = Array(n).fill(0);
		var position = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		// Collects adjacent position of increasing order element
		for (var i = 1; i < n; ++i)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
		}
		position = n - 1;
		// Collects adjacent position of decreasing order element
		for (var i = n - 2; i >= 0; --i)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
		}
		if (right[s] >= left[e])
		{
			process.stdout.write("\n Subarray (" + 
                                 s + "-" + e + ") is in hill form ");
		}
		else
		{
			process.stdout.write("\n Subarray (" + 
                                 s + "-" + e + ") is not in hill form ");
		}
	}
}

function main()
{
	var task = new Mount();
	var arr1 = [5, 2, 4, 1, 6, 3, 2];
	var arr2 = [7, 8, 9, 4, 6, 5, 2, 3];
	var n = arr1.length;
	task.printArray(arr1, n);
	//  s = 2  e = 4
	task.isHill(arr1, n, 2, 4);
	//  s = 1  e = 3
	task.isHill(arr1, n, 1, 3);
	// Check arr2
	n = arr2.length;
	task.printArray(arr2, n);
	//  s = 1  e = 5
	task.isHill(arr2, n, 1, 5);
	//  s = 5  e = 7
	task.isHill(arr2, n, 5, 7);
	//  s = 3  e = 5
	task.isHill(arr2, n, 3, 5);
}
main();

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
#    Python 3 program for
#    Check if an subarray is a form of hill
class Mount :
	#  Display given list elements
	def printArray(self, arr, n) :
		print(end = "\n")
		i = 0
		while (i < n) :
			print(" ", arr[i], end = "")
			i += 1
		
	
	def isHill(self, arr, n, s, e) :
		if (n <= 2 or s < 0 or s >= e or e < 0 or e >= n) :
			return
		
		#  Use to collect position of adjacent increasing element
		#  From left to right
		left = [0] * (n)
		#  Use to collect position of adjacent decreasing element
		#  From right to left
		right = [0] * (n)
		position = 0
		#  Set last value of list right
		right[n - 1] = n - 1
		i = 1
		#  Collects adjacent position of increasing order element
		while (i < n) :
			if (arr[i] > arr[i - 1]) :
				position = i
			
			left[i] = position
			i += 1
		
		position = n - 1
		i = n - 2
		#  Collects adjacent position of decreasing order element
		while (i >= 0) :
			if (arr[i] > arr[i + 1]) :
				position = i
			
			right[i] = position
			i -= 1
		
		if (right[s] >= left[e]) :
			print("\n Subarray (", s ,"-", e ,") is in hill form ", end = "")
		else :
			print("\n Subarray (", s ,"-", e ,") is not in hill form ", end = "")
		
	

def main() :
	task = Mount()
	arr1 = [5, 2, 4, 1, 6, 3, 2]
	arr2 = [7, 8, 9, 4, 6, 5, 2, 3]
	n = len(arr1)
	task.printArray(arr1, n)
	#   s = 2  e = 4
	task.isHill(arr1, n, 2, 4)
	#   s = 1  e = 3
	task.isHill(arr1, n, 1, 3)
	#  Check arr2
	n = len(arr2)
	task.printArray(arr2, n)
	#   s = 1  e = 5
	task.isHill(arr2, n, 1, 5)
	#   s = 5  e = 7
	task.isHill(arr2, n, 5, 7)
	#   s = 3  e = 5
	task.isHill(arr2, n, 3, 5)

if __name__ == "__main__": main()

Output

  5  2  4  1  6  3  2
 Subarray ( 2 - 4 ) is not in hill form
 Subarray ( 1 - 3 ) is in hill form
  7  8  9  4  6  5  2  3
 Subarray ( 1 - 5 ) is not in hill form
 Subarray ( 5 - 7 ) is not in hill form
 Subarray ( 3 - 5 ) is in hill form
#    Ruby program for
#    Check if an subarray is a form of hill
class Mount 
	#  Display given array elements
	def printArray(arr, n) 
		print("\n")
		i = 0
		while (i < n) 
			print(" ", arr[i])
			i += 1
		end

	end

	def isHill(arr, n, s, e) 
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n) 
			return
		end

		#  Use to collect position of adjacent increasing element
		#  From left to right
		left = Array.new(n) {0}
		#  Use to collect position of adjacent decreasing element
		#  From right to left
		right = Array.new(n) {0}
		position = 0
		#  Set last value of array right
		right[n - 1] = n - 1
		i = 1
		#  Collects adjacent position of increasing order element
		while (i < n) 
			if (arr[i] > arr[i - 1]) 
				position = i
			end

			left[i] = position
			i += 1
		end

		position = n - 1
		i = n - 2
		#  Collects adjacent position of decreasing order element
		while (i >= 0) 
			if (arr[i] > arr[i + 1]) 
				position = i
			end

			right[i] = position
			i -= 1
		end

		if (right[s] >= left[e]) 
			print("\n Subarray (", s ,"-", e ,") is in hill form ")
		else
 
			print("\n Subarray (", s ,"-", e ,") is not in hill form ")
		end

	end

end

def main() 
	task = Mount.new()
	arr1 = [5, 2, 4, 1, 6, 3, 2]
	arr2 = [7, 8, 9, 4, 6, 5, 2, 3]
	n = arr1.length
	task.printArray(arr1, n)
	#   s = 2  e = 4
	task.isHill(arr1, n, 2, 4)
	#   s = 1  e = 3
	task.isHill(arr1, n, 1, 3)
	#  Check arr2
	n = arr2.length
	task.printArray(arr2, n)
	#   s = 1  e = 5
	task.isHill(arr2, n, 1, 5)
	#   s = 5  e = 7
	task.isHill(arr2, n, 5, 7)
	#   s = 3  e = 5
	task.isHill(arr2, n, 3, 5)
end

main()

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form 
 Subarray (1-3) is in hill form 
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form 
 Subarray (5-7) is not in hill form 
 Subarray (3-5) is in hill form 
/*
    Scala program for
    Check if an subarray is a form of hill
*/
class Mount()
{
	// Display given array elements
	def printArray(arr: Array[Int], n: Int): Unit = {
		print("\n");
		var i: Int = 0;
		while (i < n)
		{
			print(" " + arr(i));
			i += 1;
		}
	}
	def isHill(arr: Array[Int], n: Int, s: Int, e: Int): Unit = {
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		var left: Array[Int] = Array.fill[Int](n)(0);
		// Use to collect position of adjacent decreasing element
		// From right to left
		var right: Array[Int] = Array.fill[Int](n)(0);
		var position: Int = 0;
		// Set last value of array right
		right(n - 1) = n - 1;
		var i: Int = 1;
		// Collects adjacent position of increasing order element
		while (i < n)
		{
			if (arr(i) > arr(i - 1))
			{
				position = i;
			}
			left(i) = position;
			i += 1;
		}
		position = n - 1;
		i = n - 2;
		// Collects adjacent position of decreasing order element
		while (i >= 0)
		{
			if (arr(i) > arr(i + 1))
			{
				position = i;
			}
			right(i) = position;
			i -= 1;
		}
		if (right(s) >= left(e))
		{
			print("\n Subarray (" + s + "-" + e + ") is in hill form ");
		}
		else
		{
			print("\n Subarray (" + s + "-" + e + ") is not in hill form ");
		}
	}
}
object Main
{
	def main(args: Array[String]): Unit = {
		var task: Mount = new Mount();
		var arr1: Array[Int] = Array(5, 2, 4, 1, 6, 3, 2);
		var arr2: Array[Int] = Array(7, 8, 9, 4, 6, 5, 2, 3);
		var n: Int = arr1.length;
		task.printArray(arr1, n);
		//  s = 2  e = 4
		task.isHill(arr1, n, 2, 4);
		//  s = 1  e = 3
		task.isHill(arr1, n, 1, 3);
		// Check arr2
		n = arr2.length;
		task.printArray(arr2, n);
		//  s = 1  e = 5
		task.isHill(arr2, n, 1, 5);
		//  s = 5  e = 7
		task.isHill(arr2, n, 5, 7);
		//  s = 3  e = 5
		task.isHill(arr2, n, 3, 5);
	}
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form
import Foundation;
/*
    Swift 4 program for
    Check if an subarray is a form of hill
*/
class Mount
{
	// Display given array elements
	func printArray(_ arr: [Int], _ n: Int)
	{
		print(terminator: "\n");
		var i: Int = 0;
		while (i < n)
		{
			print(" ", arr[i], terminator: "");
			i += 1;
		}
	}
	func isHill(_ arr: [Int], _ n: Int, _ s: Int, _ e: Int)
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		var left: [Int] = Array(repeating: 0, count: n);
		// Use to collect position of adjacent decreasing element
		// From right to left
		var right: [Int] = Array(repeating: 0, count: n);
		var position: Int = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		var i: Int = 1;
		// Collects adjacent position of increasing order element
		while (i < n)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
			i += 1;
		}
		position = n - 1;
		i = n - 2;
		// Collects adjacent position of decreasing order element
		while (i >= 0)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
			i -= 1;
		}
		if (right[s] >= left[e])
		{
			print("\n Subarray (", s ,"-", 
                  e ,") is in hill form ", terminator: "");
		}
		else
		{
			print("\n Subarray (", s ,"-", 
                  e ,") is not in hill form ", terminator: "");
		}
	}
}
func main()
{
	let task: Mount = Mount();
	let arr1: [Int] = [5, 2, 4, 1, 6, 3, 2];
	let arr2: [Int] = [7, 8, 9, 4, 6, 5, 2, 3];
	var n: Int = arr1.count;
	task.printArray(arr1, n);
	//  s = 2  e = 4
	task.isHill(arr1, n, 2, 4);
	//  s = 1  e = 3
	task.isHill(arr1, n, 1, 3);
	// Check arr2
	n = arr2.count;
	task.printArray(arr2, n);
	//  s = 1  e = 5
	task.isHill(arr2, n, 1, 5);
	//  s = 5  e = 7
	task.isHill(arr2, n, 5, 7);
	//  s = 3  e = 5
	task.isHill(arr2, n, 3, 5);
}
main();

Output

  5  2  4  1  6  3  2
 Subarray ( 2 - 4 ) is not in hill form
 Subarray ( 1 - 3 ) is in hill form
  7  8  9  4  6  5  2  3
 Subarray ( 1 - 5 ) is not in hill form
 Subarray ( 5 - 7 ) is not in hill form
 Subarray ( 3 - 5 ) is in hill form
/*
    Kotlin program for
    Check if an subarray is a form of hill
*/
class Mount
{
	// Display given array elements
	fun printArray(arr: Array < Int > , n: Int): Unit
	{
		print("\n");
		var i: Int = 0;
		while (i < n)
		{
			print(" " + arr[i]);
			i += 1;
		}
	}
	fun isHill(arr: Array < Int > , n: Int, s: Int, e: Int): Unit
	{
		if (n <= 2 || s < 0 || s >= e || e < 0 || e >= n)
		{
			return;
		}
		// Use to collect position of adjacent increasing element
		// From left to right
		val left: Array < Int > = Array(n)
		{
			0
		};
		// Use to collect position of adjacent decreasing element
		// From right to left
		val right: Array < Int > = Array(n)
		{
			0
		};
		var position: Int = 0;
		// Set last value of array right
		right[n - 1] = n - 1;
		var i: Int = 1;
		// Collects adjacent position of increasing order element
		while (i < n)
		{
			if (arr[i] > arr[i - 1])
			{
				position = i;
			}
			left[i] = position;
			i += 1;
		}
		position = n - 1;
		i = n - 2;
		// Collects adjacent position of decreasing order element
		while (i >= 0)
		{
			if (arr[i] > arr[i + 1])
			{
				position = i;
			}
			right[i] = position;
			i -= 1;
		}
		if (right[s] >= left[e])
		{
			print("\n Subarray (" + s + "-" + e + ") is in hill form ");
		}
		else
		{
			print("\n Subarray (" + s + "-" + e + ") is not in hill form ");
		}
	}
}
fun main(args: Array < String > ): Unit
{
	val task: Mount = Mount();
	val arr1: Array < Int > = arrayOf(5, 2, 4, 1, 6, 3, 2);
	val arr2: Array < Int > = arrayOf(7, 8, 9, 4, 6, 5, 2, 3);
	var n: Int = arr1.count();
	task.printArray(arr1, n);
	//  s = 2  e = 4
	task.isHill(arr1, n, 2, 4);
	//  s = 1  e = 3
	task.isHill(arr1, n, 1, 3);
	// Check arr2
	n = arr2.count();
	task.printArray(arr2, n);
	//  s = 1  e = 5
	task.isHill(arr2, n, 1, 5);
	//  s = 5  e = 7
	task.isHill(arr2, n, 5, 7);
	//  s = 3  e = 5
	task.isHill(arr2, n, 3, 5);
}

Output

 5 2 4 1 6 3 2
 Subarray (2-4) is not in hill form
 Subarray (1-3) is in hill form
 7 8 9 4 6 5 2 3
 Subarray (1-5) is not in hill form
 Subarray (5-7) is not in hill form
 Subarray (3-5) is in hill form




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment