日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Leetcode题库 11.盛水最多的容器(双指针法 C实现)

發布時間:2024/4/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Leetcode题库 11.盛水最多的容器(双指针法 C实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 解析
  • 思路
  • 原理
  • 代碼
    • 寫法1
    • 寫法2

解析

p_0:左”指針”
p_1:右”指針”
Area:當前雙”指針”代表面積大小
ret:記錄面積最大值

思路

p_0指向數組頭部
p_1指向數組尾部
Area為當前雙”指針”代表的面積
比較Area與ret大小

若height[p_0]>=height[p_1]
——”指針”p_0+1, ”指針”p_1所代表的面積一定小于Area
——”指針”p_0, ”指針”p_1-1所代表的面積可能大于Area
——要求最大面積, 于是p_1自減1
height[p_0]<height[p_1]
——同理有p_0自加1

原理

如何保證被剔除的p_1/p_0不會與除p_0/p_1外的”指針”形成更大的面積
證明:
若height[p_0]>=height[p_1], 則剔出p_1
”指針”p_0, ”指針”p_1所代表的面積=(p_1-p_0)*height[p_1]
存在i>0, ”指針”p_0+i, 與”指針”p_1形成的面積=(p_1-(p_0+i))*min(height[p_0+i], height[p_1])
比較雙方第一項(p_1-p_0) ,(p_1-(p_0+i)) , 得到前者>后者
比較雙方第二項height[p_1], min(height[p_0+i], height[p_1]) , 得到前者>=后者
于是有
被剔除的p_1不可能與p_0+i形成更大的面積

height[p_0]<height[p_1], 剔出p_0同理

代碼

寫法1

int maxArea(int* height, int heightSize){int p_0=0,p_1=heightSize-1,Area,ret=0;while(p_0!=p_1){if(height[p_0]>=height[p_1]){Area=(p_1-p_0)*height[p_1];p_1--;}else{Area=(p_1-p_0)*height[p_0];p_0++;}if(ret<=Area)ret=Area;}return ret; }

寫法2

int maxArea(int* height, int heightSize){int *p_0=height,*p_1=p_0+(heightSize-1),Area,ret=0;while(p_0!=p_1){if(*p_0>=*p_1){Area=(p_1-p_0)*(*p_1);p_1--;}else{Area=(p_1-p_0)*(*p_0);p_0++;}if(ret<=Area)ret=Area;}return ret; }

總結

以上是生活随笔為你收集整理的Leetcode题库 11.盛水最多的容器(双指针法 C实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。