יול.10

כמות מינימלית של קפיצות כדי להגיע לסוף

כמות מינימלית של קפיצות כדי להגיע לסוף

נותנים מערך של קפיצות. יש להחזיר מספר קפיצות מינימלי שמאפשר להגיעה לסוף המערך. לדוגמה: 3, 4, 2, 1, 2, 3, 7, 1, 1, 1, 3 מספר קפיצות: 4

  1. //dynamic programming (less optimal solution) O(N^2)
  2. public static int MinimumNumberOfJumps(int[] array) {
  3. int[] jumps = new int[array.Length];
  4. Array.Fill(jumps, Int32.MaxValue);
  5. jumps[0] = 0;
  6. for(int i = 1; i < array.Length; i++) {
  7. for(int j = 0; j < i; j++) {
  8. if(array[j] >= i - j)
  9. jumps[i] = Math.Min(jumps[j] + 1, jumps[i]);
  10. }
  11. }
  12. return jumps[jumps.Length - 1];
  13. }
  14.  
  15. //more optimal solution O(N) time
  16. public static int MinimumNumberOfJumps(int[] array) {
  17. if(array.Length == 1)
  18. return 0;
  19. int jumps = 0;
  20. int maxReach = array[0];
  21. int steps = array[0];
  22. for(int i = 1; i < array.Length - 1; i++) {
  23. maxReach = Math.Max(maxReach, i + array[i]);
  24. steps--;
  25. if(steps == 0) {
  26. jumps++;
  27. steps = maxReach - i;
  28. }
  29. }
  30. return jumps + 1;
  31. }


תגיות:
שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה