Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Решение работает в один проход, избегая поиска максимума проходом двух «указателей» навстречу друг другу
- //с противоположных концов массива. Если наибольшее значение, найденное слева от левого указателя меньше,
- //чем наибольшее значение найденное справа от правого указателя, то мы сдвигаем левый указатель на один индекс вправо.
- //В противном случае, двигаем правый указатель на один индекс влево. Повторяем до тех пор, пока два указателя не пересекутся.
- //(На словах звучит запутанно, код на самом деле очень простой)
- class Ideone
- {
- public static void main (String[] args) //throws java.lang.Exception
- {
- int[] myIntArray = {1, 2, 1, 4, 2, 3, 2, 3, 2, 4};
- int[] myIntArray2= {1, 3, 2, 5, 1, 3, 1, 4};
- System.out.println(calculateVolume(myIntArray));
- System.out.println(calculateVolume(myIntArray2));
- }
- public static int calculateVolume(int[] land) {
- int leftMax = 0;
- int rightMax = 0;
- int left = 0;
- int right = land.length - 1;
- int volume = 0;
- while(left < right) {
- if(land[left] > leftMax) {
- leftMax = land[left];
- }
- if(land[right] > rightMax) {
- rightMax = land[right];
- }
- if(leftMax >= rightMax) {
- volume += rightMax - land[right];
- right--;
- } else {
- volume += leftMax - land[left];
- left++;
- }
- }
- return volume;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement