zoukankan      html  css  js  c++  java
  • 算法实现柱形集合积水面积

    用一个数组代表柱形墙的的高度。当下雨的时候柱形墙能积水的体积是多少

    下面是python的实现算法:

    # -*- coding: utf-8 -*-
    def savewater(arr):
        point_l=0
        max_l=arr[0]
        point_r=len(arr)-1
        max_r=arr[len(arr)-1]
        volume=0
        #point_l从左向右遍历,point_r从右向左遍历
        while point_l<point_r:
            #能积水的标准时两边的高度大于中间的
            if max_l<max_r:
                point_l=point_l+1
                if max_l<=arr[point_l]:
                    max_l=arr[point_l]
                else:
                    volume=volume+max_l-arr[point_l]
            else:
                point_r=point_r-1
                if max_r<=arr[point_r]:
                    max_r=arr[point_r]
                else:
                    volume=volume+max_r-arr[point_r]
        return volume
        
        
    if __name__=='__main__':
        arr=[1,2,3,4,2,1,1,5,3,2]
        volume=savewater(arr)
        print volume

    java实现算法:

    package com.gh.d1;
    
    /**
     * Created by Lenovo on 2014/12/29.
     */
    public class D1_1 {
        public static void main(String[] args){
            int[] array=new int[]{1,2,3,4,2,1,1,5,3,2};
            int volume=savewater(array);
            System.out.println(volume);
        }
        public static int savewater(int[] array) {
            int point_l = 0;
            int max_l = 0;
            int point_r = array.length;
            int max_r = array[array.length - 1];
            int volume = 0;
            while (point_l < point_r) {
                if (max_l < max_r) {
                    point_l++;
                    if (max_l <= array[point_l]) {
                        max_l = array[point_l];
                    } else {
                        volume = volume + max_l - array[point_l];
                    }
                } else {
                    point_r--;
                    if (max_r <= array[point_r]) {
                        max_r = array[point_r];
                    } else {
                        volume = volume + max_r - array[point_r];
                    }
                }
            }
            return volume;
        }
    }

    golang实现:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
        arr := []int{1, 2, 3, 4, 2, 1, 1, 5, 3, 2}
        volume := savewater(arr)
        fmt.Println(volume)
    }
    func savewater(arr []int) int {
        point_l := 0
        max_l := 0
        point_r := len(arr) - 1
        max_r := arr[len(arr)-1]
        volume := 0
        for point_l < point_r {
            if max_l < max_r {
                point_l++
                if max_l < arr[point_l] {
                    max_l = arr[point_l]
                } else {
                    volume = volume + max_l - arr[point_l]
                }
            } else {
                point_r--
                if max_r < arr[point_r] {
                    max_r = arr[point_r]
                } else {
                    volume = volume + max_r - arr[point_r]
                }
            }
        }
        return volume
    }
  • 相关阅读:
    第四章的知识点:
    第一章的知识点:
    13
    12
    11
    10
    9
    zy
    金嘉琪 作业
    1022作业
  • 原文地址:https://www.cnblogs.com/guhao123/p/4191383.html
Copyright © 2011-2022 走看看