Guest User

Untitled

a guest
Jan 13th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.33 KB | None | 0 0
  1. public class Flags {
  2.  
  3. public int solution(int[] A) {
  4. int N = A.length;
  5. if (N < 3) {
  6. return 0;
  7. }
  8.  
  9. int[] nextPeaks = new int[N];
  10. int numberOfPeaks = 0;
  11. int firstPeakPosition = -1;
  12.  
  13. nextPeaks[N-1] = -1;
  14. for (int i = N - 2; i > 0; i--) {
  15. if (A[i] > A[i-1] && A[i] > A[i+1]) {
  16. nextPeaks[i] = i;
  17. numberOfPeaks++;
  18. firstPeakPosition = i;
  19. } else {
  20. nextPeaks[i] = nextPeaks[i+1];
  21. }
  22. }
  23. nextPeaks[0] = nextPeaks[1];
  24.  
  25. if (numberOfPeaks < 2) {
  26. return numberOfPeaks;
  27. }
  28.  
  29. int maxNumberOfFlags = (int)Math.ceil(Math.sqrt(N));
  30. int numberOfFlags = 1;
  31. while (maxNumberOfFlags > 1) {
  32. int flagPosition = firstPeakPosition;
  33. int flagCounter = 1;
  34.  
  35. while (flagCounter <= maxNumberOfFlags) {
  36. int temp = flagPosition + maxNumberOfFlags;
  37. if ((temp >= N) || (nextPeaks[temp] == -1)) {
  38. break;
  39. }
  40.  
  41. flagPosition = nextPeaks[temp];
  42. flagCounter++;
  43. }
  44.  
  45. numberOfFlags = Math.max(numberOfFlags, flagCounter);
  46. maxNumberOfFlags--;
  47. }
  48.  
  49. return numberOfFlags;
  50. }
  51. }
Add Comment
Please, Sign In to add comment