Interview Question
Data Engineer Interview

MetaGiven an array of integers, we would like to determine whether the array is monotonic (nondecreasing/nonincreasing) or not. Examples: // 1 2 5 5 8 // true // 9 4 4 2 2 // true // 1 4 6 3 // false //1 1 1 1 1 1 // true
Interview Answers
19 Answers
if l == sorted(l) or l == sorted(l,reverse=True): print(True) else: print(False)
Abhishek Goel on
python solution. inc = dec = True for i in range(len(nums)1): if nums[i] > nums[i+1]: inc = false if nums[i] < nums[i+1]: dec = false return inc or dec
Anonymous on
An array is monotonic if and only if it is monotone increasing, or monotone decreasing. Since p = A[i+1] for all i indexing from 0 to len(A)2. Note: Array with single element can be considered to be both monotonic increasing or decreasing, hence returns “True“. Python 3 code # Check if given array is Monotonic def isMonotonic(A): return (all(A[i] = A[i + 1] for i in range(len(A)  1))) # Test with an Array A = [6, 5, 4, 4] # Print required result print(isMonotonic(A))
Yusuf Arif on
def array_is_monotonic(array): return len(set(["gte" if x >= array[i+1] else "lt" for i, x in enumerate(array[:1])])) == 1 print("[1, 2, 5, 5, 8] > true:", array_is_monotonic([1, 2, 5, 5, 8])) print("[9, 4, 4, 2, 2] > true:", array_is_monotonic([9, 4, 4, 2, 2])) print("[1, 4, 6, 3] > false:", array_is_monotonic([1, 4, 6, 3])) print("[1, 1, 1, 1, 1, 1] > true:", array_is_monotonic([1, 1, 1, 1, 1, 1]))
Carlos Alvidrez on
def ismonotonict(List) : return ( all (A[i] = A[i+1] for i in range(len(A)1))
Simple way on
def ismonotonict(List) : return ( all (A[i] = A[i+1] for i in range(len(A)1))
Simple way on
The solutions above is not accurate, just assigns A[i] to A[i+1] but doesn't incorporate increasing/decreasing values in array. A clearer way would be to do it as follows: def is_monotonic(A): n=len(A) return ( all(A[i] = a[i+1] for i in range(n1)) )
Kuma on
Answer got cut off.. def is_monotonic(a): n=len(a) return (all(a[i] = a[i+1] for i in range(n1))
Kuma on
Python Loop.. class Solution(object): def isMonotonic(self, A): """ :type A: List[int] :rtype: bool """ j = 0 k = 0 for i in range(len(A)1): if A[i] A[i+1]: k += 1 else: j += 1 k += 1 if j == (len(A)1) or k == (len(A)1): return True else: return False
Anonymous on
The key in these questions is to cover the fundamentals, and be ready for the backandforth with the interviewer. Might be worth doing a mock interview with one of the Facebook or exFacebook Data Engineer experts on Prepfully? They give realworld practice and guidance, which is pretty helpful. prepfully.com/practiceinterviews
Anonymous on
def monotonic(L): if L: return (all(x >= y for x,y in zip(L,L[1:])) or all(x <= y for x,y in zip(L,L[1:]))) else: return False L = [1, 2, 5, 5, 8] L = [9,4,4,2,2] L = [1,4,6,3] L = [1,1,1,1,1,1] monotonic(L)
Anonymous on
fun monotonic(array: IntArray) : Boolean{ if(array.isEmpty()  array.size array[i+1]){ if(increasing == false){ return false } increasing = true }else if(array[i] < array[i+1]){ if(increasing == true){ return true } increasing = false } } return true }
Rajan on
#first function: ever increasing? def is_increasing(lst): for i in range(1,len(lst)): if lst[i] lst[i1]: return False return True # True OR True: then yes. def monontonic def is_monotonic(lst): if is_increasing(lst) == True or is_decreasing(lst) == True: return True else: return False
mockinterview.co on
def setUp(): integers = list(map(int,input().strip().split())) return integers def isMonotonic(int_list): monotonic = True if len(int_list) int_list[i1]: return "nonmonotonic" else: if int_list[i] int_list[i1]: i_or_d = 'i' if i_or_d == "n": return "neighter" elif not monotonic: return "Nonmonotonic" else: return "Monotonic" if __name__ == '__main__': int_list = setUp() print("Monotonic or Nonmonotonic?: ", isMonotonic(int_list))
Chandan on
def setUp(): integers = list(map(int,input().strip().split())) return integers def isMonotonic(int_list): monotonic = True if len(int_list) int_list[i1]: return "nonmonotonic" else: if int_list[i] int_list[i1]: i_or_d = 'i' if i_or_d == "n": return "neighter" elif not monotonic: return "Nonmonotonic" else: return "Monotonic" if __name__ == '__main__': int_list = setUp() print("Monotonic or Nonmonotonic?: ", isMonotonic(int_list))
Anonymous on
def isMonotonic(array): direction = 0 for i in range(1, len(array)): if array[i] > array[i1]: if direction == 1: return False else: direction = 1 if array[i] < array[i1]: if direction == 1: return False else: direction = 1 return True
rcKahuna on
some of the above solutions do not work completely. they fail on the last digit. ex. arr=[11111,12558,357] def check_int(num): a=str(num) for idx, digit in enumerate(a): if idx != len(str(num)) 1: check_idx= idx + 1 else: return False if digit == a[check_idx]: return True for digits in arr: print(check_int(digits))
hw on
return ( all (A[i] >= A[i+1] for i in range(len(A)1)) or all(A[i] <= A[i+1] for i in range(len(A)1 )) )
Anonymous on
Easy question.. The "loop way" (Exactly one pass over the array but bulky code): > return True is the sequence has size less than 3 > loop through from start until you find a sequential pair that is unequal and determine whether the array is increasing or decreasing, > continue the loop now where you left off and check each pair of words whether they increase (if array is supposed to be increasing) or decrease (if array is supposed to be decreasing). > return false when the condition is not met, and return true if you finish the loop without having the condition being violated Algebraic way (a few passes over the array but tidy code): > again return true if array has less than 3 elements > Create 2 copies of the array, one with the first element removed and the other the last element removed > subtract the first copy from the second copy > check in the resulting array whether all values are at least 0 (monotonically increasing) or all values are at most 0 (monotonically decreasing) > If neither applies, return false > if one applies, check whether the relation between arr[0] and arr[1] is also the same and if so return true, if not return false
Anonymous on