def sortedHasSum(s, x): tempSum = 0 for i in range(len(s) -1, -1, -1): if tempSum + s[i] <= x: tempSum += s[i] if(tempSum == x): return True return False def hasSumHelper(s, x): if len(s) == 1: if x - s[0] >= 0: return x - s[0] else: return x elif len(s) == 0: return x; lower,equal,upper = partition(s) leftOver = hasSumHelper(upper, x) if len(equal) > 1: leftOver = hasSumHelper([equal[0]], leftOver) leftOver = hasSumHelper(equal[1::],leftOver) else: leftOver = hasSumHelper(upper, leftOver) return hasSumHelper(lower, leftOver) def hasSum(s, x): return hasSumHelper(s, x) == 0 def partition(data): pivot = len(data) -1 lower, equal, upper = [], [], [] for i in range(0, len(data), 1): if data[i] > data[pivot]: upper.append(data[i]) elif data[i] == data[pivot]: equal.append(data[i]) else: lower.append(data[i]) return lower, equal, upper