455.ビスケットの配布(Python)

1814 ワード

タイトル
難易度:★☆☆☆タイプ:配列
もしあなたが素晴らしい保護者だとしたら、子供たちにクッキーをあげたいです.しかし、子供1人につき最大1枚のビスケットしかあげられません.子供iごとに、食欲値giがあります.これは子供たちが食欲を満たすビスケットの最小サイズです.そしてビスケットjごとに、サイズsjが1つあります.もしsj>=giであれば、私たちはこのビスケットjを子供iに割り当てることができて、この子供は満足します.あなたの目標は、できるだけ多くの子供を満たし、この最大値を出力することです.
注意:
食欲値が正だと仮定することができます.子供はせいぜいビスケットを1枚しか持っていない.

例1:入力:[1,2,3],[1,1]出力:1解釈:あなたは3人の子供と2枚のビスケットを持っていて、3人の子供の食欲値はそれぞれ:1,2,3です.ビスケットを2枚持っていますが、サイズが1なので、食欲値が1の子供を満足させるしかありません.だからあなたは1を出力すべきです.
例2:入力:[1,2],[1,2,3]出力:2解釈:子供2人とビスケット3枚、子供2人の食欲値はそれぞれ1,2です.あなたが持っているビスケットの数とサイズはすべての子供を満足させるのに十分です.だからあなたは2を出力すべきです.
に答える
まず、子供の食欲を小さいものから大きいものに並べ、ビスケットを小さいものから大きいものに並べます.私たちは以下の流れで条件を満たす子供を統計する必要があります.
  • カウンタは、食欲を満たす子供の数を統計するために使用され、食欲を満たすたびに、カウンタ+1;
  • ポインタ、ここでは2つのポインタを定義し、1つは子供の配列(g_)に使用され、ビスケット配列(s_)に使用され、2つの配列はいずれも小さいものから大きいものまで遍歴している.
  • 条件は、現在のビスケットが子供の食欲より大きい場合、実行する操作は、カウンタ+1、子供配列ポインタ+1、ビスケット配列ポインタ+1である.そうでなければビスケット配列のポインタ+1だけで、次のビスケットを考察することができます.
  • サイクル制御.ここでは,ポインタが境界を越えてループ制御を行うか否かで,任意のポインタが境界を越えたときにループを飛び出す.
  • class Solution:
        def findContentChildren(self, g, s):
            g.sort()                                #             
            s.sort()                                #           
            g_, s_, count = 0, 0, 0                 #        、        
            while g_ < len(g) and s_ < len(s):      #     
                if g[g_] <= s[s_]:                  #                 
                    count += 1                      #    +1
                    g_ += 1                         #      
                    s_ += 1                         #      
                else:                               #       
                    s_ += 1                         #        
            return count                            #           
    

    質問やアドバイスがあれば、コメントエリアへようこそ~