Back home

الفنون رقم 035

الفنون رقم 035

الفنون 035

الخوارزمية

11. حاوية بها معظم الماء

الصعوبة: متوسطة

بالنظر إلى n الأعداد الصحيحة غير السالبة a<sub style=“display: inline;”>1</sub>, a<sub style=“display: inline;”>2</sub>, …, a<sub style=“display: inline;”>n </sub>، حيث يمثل كل منها نقطة في الإحداثي (i, a<sub style=“display: inline;”>i</sub>). n يتم رسم الخطوط العمودية بحيث تكون نقطتي نهاية السطر i عند (i, a<sub style=“display: inline;”>i</sub>) و (i, 0). ابحث عن خطين يشكلان مع المحور السيني حاوية، بحيث تحتوي الحاوية على أكبر قدر من الماء.

**ملاحظة: **لا يجوز لك إمالة الحاوية وأن تكون n على الأقل 2.

<small style=“display: inline;”>الخطوط الرأسية أعلاه ممثلة بمصفوفة [1,8,6,2,5,4,8,3,7]. في هذه الحالة، الحد الأقصى لمساحة الماء (القسم الأزرق) الذي يمكن أن تحتوي عليه الحاوية هو 49.</small>

مثال:

Input: [1,8,6,2,5,4,8,3,7]
Output: 49

الحل

اللغة: سويفت

قد يكون من الصعب على أي شخص أن يتخيل ما هو أفضل من أي وقت مضى هذا هو السبب في أن هذا هو ما يحدث في Leetcode.

class Solution {
    func maxArea(_ height: [Int]) -> Int {
        var maxArea = 0
        
        for i in 0..<height.count {
            let left = height[i]
            for j in (i + 1)..<height.count {
                let right = height[j]
                let rightIndex = j
                
                let tem = min(left, right) * (rightIndex - i)
                maxArea = max(maxArea, tem)
            }
        }
        return maxArea
    }
}

看了别人的提示后،发现了O(N)时间复杂度的解决هذا هو السبب في أن هذا هو ما يحدث في المستقبل.


class Solution {
    func maxArea(_ height: [Int]) -> Int {
        var maxArea = 0
        var left = 0
        var right = height.count - 1
        var leftValue = 0
        var rightValue = 0
        while left < right {
            leftValue = height[left]
            rightValue = height[right]
            
            maxArea = max(maxArea, min(leftValue, rightValue) * (right - left))
            
            if leftValue > rightValue {
                right -= 1
            }
            else{
                left += 1
            }
        }
        return maxArea
    }
}

مراجعة

عرض شركة 程序员如何وHR: https://dandan2009.github.io/2019/12/10/job-negotiation-for-programmers-the-basic-principles/

نصائح

  • Tips1: الاسم المستعار zsh 怎么加参数?

    الاسم المستعار 我们知道可以简化命令،比如下面

    alias ios='cd /Users/dan/Documents/wanan/ios/iv && pod install --no-repo-update && open iv.xcworkspace'
    

    شكرا جزيلا

     ios         
    

    لا داعي للقلق.

    那么怎么 الاسم المستعار 命令怎么带参数呢,答案就是用函数.

    deletefile() {
      rm -rf $1 
      
      echo rm -rf $1 
    }
    alias dele=deletefile
    

    قم بتنزيل الملف dele 2.txt،

     rm -rf  2.txt
     echo rm -rf  2.txt
     
    
  • نصائح 2: نظام التشغيل iOS يستخدم الرقم، رقم NSDecimalNumber

    @property(nonatomic, strong) NSDecimalNumber* price;//< 单位:元
    

    接口返回是NSNumber类型،有些数字解析会有问题،比如实际数据是9. 8، AFN يرحب بالرقم 9.800000000000001، لا يوجد أي مشكلة،

    تم إنشاء هذا الخيار بواسطة مجموعة NSDecimalNumberHandler.

    - (void)setPrice:(NSDecimalNumber *)price{
         NSDecimalNumberHandler *handler = [NSDecimalNumberHandler decimalNumberHandlerWithRoundingMode:NSRoundDown scale:2 raiseOnExactness:NO raiseOnOverflow:NO raiseOnUnderflow:NO raiseOnDivideByZero:NO];
        _price = [price decimalNumberByRoundingAccordingToBehavior:handler];
    };
    
    RoundingMode:  NSRoundDown只舍不入
    scale : 2 保留两位小数
    
    
  • نصائح 3: مفتاح Mac ssh

    قم بإنشاء ~/.ssh. قم بإنشاء ملف config الخاص بك

    تعليمات التكوين:

    # github 的ssh-key
    Host github.com
    User xxxx@gmail.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/github 
    
    
    # coding.net的ssh-key
    Host gitlab.coding.net
    User xxxx@qq.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa 
    

شارك

هل لديك 251 شخصًا؟