Repository where I mostly put random python scripts.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.1 KiB

  1. def sortedHasSum(s, x):
  2. tempSum = 0
  3. for i in range(len(s) -1, -1, -1):
  4. if tempSum + s[i] <= x:
  5. tempSum += s[i]
  6. if(tempSum == x):
  7. return True
  8. return False
  9. def hasSumHelper(s, x):
  10. if len(s) == 1:
  11. if x - s[0] >= 0:
  12. return x - s[0]
  13. else:
  14. return x
  15. elif len(s) == 0:
  16. return x;
  17. lower,equal,upper = partition(s)
  18. leftOver = hasSumHelper(upper, x)
  19. if len(equal) > 1:
  20. leftOver = hasSumHelper([equal[0]], leftOver)
  21. leftOver = hasSumHelper(equal[1::],leftOver)
  22. else:
  23. leftOver = hasSumHelper(upper, leftOver)
  24. return hasSumHelper(lower, leftOver)
  25. def hasSum(s, x):
  26. return hasSumHelper(s, x) == 0
  27. def partition(data):
  28. pivot = len(data) -1
  29. lower, equal, upper = [], [], []
  30. for i in range(0, len(data), 1):
  31. if data[i] > data[pivot]:
  32. upper.append(data[i])
  33. elif data[i] == data[pivot]:
  34. equal.append(data[i])
  35. else:
  36. lower.append(data[i])
  37. return lower, equal, upper