Print all the LEADERS in the array. An element is leader if it is greater than all the elements to its right side.
The rightmost element is always a leader.
Example:
Input: [13, 15, 6, 7, 8, 3]
Output: 15, 8, 3
def print_leaders(arr):
n = len(arr)
# Righmost element is always leader
max_from_right = arr[-1]
leaders = [arr[-1]]
for i in range(n-2, -1, -1):
if max_from_right < arr[i]:
max_from_right = arr[i]
leaders.append(arr[i])
print(leaders[::-1])
print("Example-1: print_leaders([13, 15, 6, 7, 8, 3])")
print_leaders([13, 15, 6, 7, 8, 3])
Output:
Given an array of positive numbers, find the maximum sum of a subsequence with the constraint that no 2 numbers in the sequence should be adjacent in the array. So 3 2 7 10 should return 13 (sum of 3 and 10) or 3 2 5 10 7 should return 15 (sum of 3, 5 and 7).
Example:
Input: arr[] = {5, 5, 10, 100, 10, 5} Output: 110
Input: arr[] = {1, 2, 3} Output: 4
Input: arr[] = {1, 20, 3} Output: 20
def max_sum_with_no_adjacents(arr):
included = excluded = 0
for current in arr:
# Get the new excluded which is max(included, excluded) as current element is
# still not added to the included
new_excluded = max(included, excluded)
# Now change the included by adding current to excluded as no two adjacents should be present.
included = excluded + current
# Finally update the exluded with new_excluded
excluded = new_excluded
print("Max sum: {}".format(max(included, excluded)))
print("Example-1: max_sum_with_no_adjacents([5, 5, 10, 100, 10, 5])")
max_sum_with_no_adjacents([5, 5, 10, 100, 10, 5])
print("\nExample-2: max_sum_with_no_adjacents([1, 2, 3])")
max_sum_with_no_adjacents([1, 2, 3])
print("\nExample-3: max_sum_with_no_adjacents([1, 20, 3])")
max_sum_with_no_adjacents([1, 20, 3])
Output:
Given an array of integers and a number x, find the smallest subarray with sum greater than the given value.
Example:
def smallest_subarray_with_atleast_given_sum(arr, x):
n = len(arr)
# Initialize current sum and minimum length
current_sum = 0; min_length = n + 1
# Initialize starting and ending indexes
start = 0; end = 0
final_start = 0; final_end = 0
# Take all the elements one by one while end is smaller than n.
while (end < n):
# Keep adding array elements while current sum is smaller than x and increment end
while (current_sum <= x and end < n):
current_sum += arr[end]
end += 1
# Once current_sum becomes greater than x, start removing the trailing statement
# Update the min_length if needed and increment start
while (current_sum > x and start < n):
if (end - start < min_length):
min_length = end - start
final_start = start
final_end = end
current_sum -= arr[start]
start+= 1
if(min_length == n+1):
print("No Subarray Possible for given sum: {}".format(x))
else:
print("Min Length: {} and Subarray: {} for given sum: {}".format(
min_length, arr[final_start:final_end], x))
print("Example-1: smallest_subarray_with_atleast_given_sum([1, 4, 45, 6, 0, 19], 51)")
smallest_subarray_with_atleast_given_sum([1, 4, 45, 6, 0, 19], 51)
print("\nExample-2: smallest_subarray_with_atleast_given_sum([1, 10, 5, 2, 7], 9)")
smallest_subarray_with_atleast_given_sum([1, 10, 5, 2, 7], 9)
print("\nExample-3: smallest_subarray_with_atleast_given_sum([1, 11, 100, 1, 0, 200, 3, 2, 1, 250], 280)")
smallest_subarray_with_atleast_given_sum([1, 11, 100, 1, 0, 200, 3, 2, 1, 250], 280)
print("\nExample-4: smallest_subarray_with_atleast_given_sum([1, 2, 4], 8)")
smallest_subarray_with_atleast_given_sum([1, 2, 4], 8)
Output:
Given an array containing n numbers. Find the length of the longest contiguous subarray such that every element in the subarray is strictly greater than its previous element in the same subarray.
Examples:
Input: arr[] = {5, 6, 3, 5, 7, 8, 9, 1, 2} Output: 5 Subarray: {3, 5, 7, 8, 9}
Input: arr[] = {12, 13, 1, 5, 4, 7, 8, 10, 10, 11} Output: 4 Subarray: {4, 7, 8, 10}
def longest_increasing_subarray(arr):
n = len(arr)
max_length = curr_length = 1
end = 0
for i in range(1, n):
if (arr[i] > arr[i-1]) :
curr_length += 1
else:
if(curr_length > max_length):
max_length = curr_length
end = i
curr_length = 1
if(curr_length > max_length):
max_length = curr_length
end = i
print("Longest Increasing Subarray: {}".format(arr[end-max_length:end]))
print("Example-1: longest_increasing_subarray([5, 6, 3, 5, 7, 8, 9, 1, 2])")
longest_increasing_subarray([5, 6, 3, 5, 7, 8, 9, 1, 2])
print("\nExample-2: longest_increasing_subarray([12, 13, 1, 5, 4, 7, 8, 10, 10, 11])")
longest_increasing_subarray([12, 13, 1, 5, 4, 7, 8, 10, 10, 11])
Output: