Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの不機嫌そうな書店のオーナー


書店の所有者が、顧客リストのエントリ数分に対して店舗を開いているとします。毎分、何人かの顧客(customers [i])が店に入り、その後、すべての顧客はその分の終わりの後に去ります。数分で、所有者は不機嫌です。ここで、所有者がi分目に不機嫌である場合、grumpy [i] =1、それ以外の場合はgrumpy [i] =0です。書店の所有者が不機嫌である場合、その分の顧客は不幸です。書店のオーナーは、X分間まっすぐに不機嫌にならないようにするテクニックを知っています。その手法は2回以上使用することはできません。私たちは一日を通して幸せになることができる顧客の最大数を見つける必要があります。したがって、入力が次のようになっている場合:customers=[1,0,1,2,1,1,7,5]およびgrumpy=[0,1,0,1,0,1]およびX=3、出力これは、所有者が最後の3分間は不機嫌にならないためです。したがって、幸せな顧客の最大数は1 + 1 + 1 + 1 + 7 + 5 =16

これを解決するには、次の手順に従います-

  • set i:=0、j:=0、sums:=empty list and temp:=0

  • 一方、j – i + 1

    • grumpy [j]が1の場合、temp:=temp + Customers [j]

    • jを1増やします

  • リスト[temp、i、j]をsums配列に挿入します

  • iとjを1増やします

  • 一方、j<顧客リストの長さ

    • grumpy [i-1]が1の場合、temp:=temp – Customers [i-1]

    • grumpy [j]が1の場合、temp:=temp + customer [j]

    • リスト[temp、i、j]をsums配列に挿入します

    • iとjを1増やします

  • sums:=内部リストの最初の要素に基づいて合計配列を並べ替える

  • index1:=合計の最後のリストの2番目の要素、index2:=合計の最後のリストの3番目の要素

  • index1からindex2の範囲のiの場合、grumpy [i]:=0

    を設定します。
  • ans:=0

  • 0から顧客の長さまでの範囲のiの場合

    • grumpy [i]が0の場合、ans:=ans + Customers [i]

  • ansを返す

理解を深めるために、次の実装を見てみましょう-

class Solution(object):
   def maxSatisfied(self, customers, grumpy, X):
      i = 0
      j = 0
      sums = []
      temp = 0
      while j-i+1<X:
         if grumpy[j]:
            temp+=customers[j]
         j+=1
      sums.append([temp,i,j])
      i+=1
      j+=1
      while j<len(customers):
         if grumpy[i-1]:
            temp-=customers[i-1]
         if grumpy[j]:
            temp+=customers[j]
         sums.append([temp,i,j])
         i+=1
         j+=1
      sums =sorted(sums,key = lambda v : v[0])
      index1 = sums[-1][1]
      index2 = sums[-1][2]
      for i in range(index1,index2+1):
         grumpy[i] = 0
      ans = 0
      for i in range(len(customers)):
         if not grumpy[i]:
            ans+=customers[i]
      return ans
ob = Solution()
print(ob.maxSatisfied([1,0,1,2,1,1,7,5],[0,1,0,1,0,1,0,1],3))

入力

[1,0,1,2,1,1,7,5]
[0,1,0,1,0,1,0,1]
3

出力

16

  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. Pythonを使用してディレクトリの所有者を変更するにはどうすればよいですか?

    pwd、grp、およびosモジュールを使用して、ファイルまたはディレクトリの所有者を変更できます。 uidモジュールは、ユーザー名からuidを取得するために使用され、grpはgidグループ名の文字列を取得するために使用され、osは所有者を変更するために使用されます。 例 import pwd import grp import os uid = pwd.getpwnam("nobody").pw_uid gid = grp.getgrnam("nogroup").gr_gid path = 'my_folder' os.chown(pat