সর্বাধিক সাব-অ্যারে


21

প্রদত্ত অ্যারের "সর্বাধিক উপ-অ্যারে" সংজ্ঞা দিন "একটি (পরপর) সাব-অ্যারে যার মধ্যে সবচেয়ে বড় যোগফল রয়েছে"। নোট করুন যে কোনও "শূন্য নয়" প্রয়োজনীয়তা রয়েছে। আউটপুট যে যোগফল।

সম্ভব হলে আপনার কোডের একটি বিবরণ দিন।

নমুনা ইনপুট 1:

1 2 3 -4 -5 6 7 -8 9 10 -11 -12 -13 14

নমুনা আউটপুট 1: 24

বিবরণ 1:
সর্বাধিক যোগফলটি কেটে 6 7 -8 9 10ফেলা এবং যোগফল যোগ করে।

নমুনা ইনপুট 2: -1 -2 -3
নমুনা আউটপুট 2: 0
বিবরণ 2: এটি সহজ :) খালি সাবহারে হ'ল "বৃহত্তম"।

প্রয়োজনীয়তা:

  • স্টিডিন ব্যতীত আর কিছু পড়বেন না এবং আউটপুট স্টাডআউটে চলে যাওয়া উচিত।
  • স্ট্যান্ডার্ড লুফোলস সীমাবদ্ধতা প্রযোজ্য।

র‌্যাঙ্কিং: সংক্ষিপ্ততম প্রোগ্রামটি এই


5
যতটা সম্ভব সংক্ষিপ্ত একটি প্রোগ্রাম লিখুন। আমি এই প্রয়োজনীয়তাটি অপসারণের পরামর্শ দেব কারণ এটি আমাদের ভাষায় প্রতিটি সম্ভাব্য প্রোগ্রাম পরীক্ষা করা এবং এটি নিশ্চিত করা উচিত যে আমরা সবচেয়ে কম ব্যবহার করছি।
Okx

প্রয়োজনীয়তা 2ও অস্পষ্ট। এর অর্থ লাইব্রেরি? কাস্টম লাইব্রেরি? আউটসোর্সিং প্রোগ্রাম? আধুনিকটি ইতিমধ্যে মানক লুফোলগুলি দ্বারা নিষিদ্ধ।
ফাঁস নুন

14
স্টিডিন ব্যতীত আর কিছু পড়বেন না, এবং স্টাডআউট ছাড়া কোথাও লিখবেন না। - কেন?
মিঃ এক্সকডার

2
খুব অনুরূপ , সম্ভবত একটি ডুপ। এছাড়াও খুব অনুরূপ
xnor

উত্তর:



6

পাইথন 3 , 61 বাইট

a=b=0
for x in eval(input()):a=max(x,a+x);b=max(a,b)
print(b)

এটি অনলাইন চেষ্টা করুন!

উইকিপিডিয়া থেকে অ্যালগোরিদম চুরি ।


3
এটি পাইথন 2-তে 7 বাইট সংক্ষিপ্ত হবে (আপনি যদি এখনও প্রাচীন ভাষার সংস্করণ ব্যবহার করেন)
মিঃ এক্সকডার

4

পাইথ , 8 বাইট

eS+0sM.:

এটি অনলাইন চেষ্টা করুন!


কিভাবে?

eS + 0sM।: Q - Q অন্তর্ভুক্ত, যার অর্থ ইনপুট। ধরা যাক এটি [-1, -2, -3]।

      ।: - সমস্ত স্বচ্ছ নন-খালি সাবলিস্ট। আমাদের [[-1], [-2], [-3], [-1, -2], [-2, -3], [-1, -2, -3]] আছে। "
    এসএম - প্রতিটি সাবলিস্টের যোগফল পান। [-1, -2, -3, -3, -5, -6]
  +0 - যোগফলের তালিকায় একটি 0 যুক্ত করুন। [0, -1, -2, -3, -3, -5, -6]
ইএস - সর্বাধিক উপাদান। এস আমাদের [-6, -5, -3, -3, -2, -1, 0] প্রদান করে, যখন ই শেষ উপাদানটি 0 প্রদান করে।

4

Okx এর উত্তর হিসাবে একই টিপস: ÎŒOM4 বাইট জন্য কাজ করা উচিত
আদনান

@ আদনান ধন্যবাদ আমি ভেবেছিলাম এখানে কেবল "1 এবং ইনপুট" অন্তর্নির্মিত আছে ... অপেক্ষা করুন ... এটি কি? এগুলি কি সংমিশ্রিত হওয়া উচিত না কিছু?
এরিক দি আউটগল্ফার

নাহ, Mস্ট্যাকের সমতল সংস্করণে সর্বাধিক সংখ্যার সন্ধান করে।
আদনান

@ আদনান ঠিক আছে ... এটি আমার কাছে খবরটি হ'ল
এরিক দ্য আউটগোল্ফার


3

সি ++, 197 195 187 বাইট

-10 বাইট জ্যাকারিকে ধন্যবাদ ý

#include<vector>
#include<numeric>
int f(std::vector<int>v){int i=0,j,t,r=0;for(;i<v.size();++i)for(j=i;j<v.size();++j){t=std::accumulate(v.begin()+i,v.begin()+j,0);if(t>r)r=t;}return r;}

আপনি কি লুপের জন্য প্রথমটির পরে বন্ধনীগুলি সরাতে পারেন?
জাকারি

এছাড়াও, কেন আপনি lএবং hযাইহোক?
জাকারি

@ জাকারি এল এবং এইচ সাব-অ্যারের সূচনা এবং শেষ সূচকের জন্য ছিল
হাটসুপয়েন্টারকুন

3

আর , 54 বাইট

a=b=0;for(x in scan()){a=max(x,a+x);b=max(a,b)};cat(b)

এটি অনলাইন চেষ্টা করুন!

থেকে নেওয়া অ্যালগরিদম: সর্বাধিক সুব্রায় সমস্যা

আর , 65 বাইট

y=seq(x<-scan());m=0;for(i in y)for(j in y)m=max(m,sum(x[i:j]));m

এটি অনলাইন চেষ্টা করুন!

  • xস্টিডিন থেকে পড়ুন ।
  • এর yসূচক হিসাবে সেট করুন x
  • সমস্ত সম্ভাব্য অজানা সাবসেটের উপর দু'বার Iterate।
  • m(প্রাথমিকভাবে m=0) সাথে একটি উপসেটের যোগফলের তুলনা করুন ।
  • সর্বাধিক মান সংরক্ষণ করুন m
  • এর মুদ্রণ মান m

আর , 72 বাইট

n=length(x<-scan());m=0;for(i in 1:n)for(j in i:n)m=max(m,sum(x[i:j]));m

এটি অনলাইন চেষ্টা করুন!

  • xস্টিডিন থেকে পড়ুন ।
  • সমস্ত সম্ভাব্য আপত্তিজনক সাবসেটগুলির জন্য একটি সম্পূর্ণ অনুসন্ধান করুন।
  • m(প্রাথমিকভাবে m=0) সাথে একটি উপসেটের যোগফলের তুলনা করুন ।
  • সর্বাধিক মান সংরক্ষণ করুন m
  • এর মুদ্রণ মান m

অন্যান্য ব্যর্থ ধারণা

58 বাইট

Reduce(max,lapply(lapply(seq(x<-scan()),tail,x=x),cumsum))

63 বাইট

Reduce(max,lapply(seq(x<-scan()),function(i)cumsum(tail(x,i))))

72 বাইট

m=matrix(x<-scan(),n<-length(x),n);max(apply(m*lower.tri(m,T),2,cumsum))

1
a=b=0খুব কাজ করে। এছাড়াও, আপনার আউটপুট মুদ্রণ পরিচালনা করতে হবে। যখন একটি পূর্ণ প্রোগ্রাম হিসাবে চালিত হয় (মাধ্যমে source) এটি কিছুই মুদ্রণ করে না।
জেএডি

@ জারকো ডাবডেলডাম, আমি যোগ করেছি cat(b), তবে যদি echo=TRUEএটির সাথে উত্সাহ দেওয়া হয় তবে bপ্রিন্টআউট ডাকতে যথেষ্ট ।
djhurio

আমি অনুমান করি যে কীভাবে পূর্ণাঙ্গ প্রোগ্রাম আর তে চালিত হয় সে সম্পর্কে কোনও সুস্পষ্ট সংজ্ঞা নেই command কমান্ডলাইনে আরএসক্রিপ্ট রয়েছে এবং আর নিজেই উত্স। তবে সাধারণত স্ক্রিপ্ট চালানোর সময় প্রয়োজনীয় পতাকাগুলি বাইটোকন্টে অন্তর্ভুক্ত থাকে। (আমি না ব্যক্তিগতভাবে স্ক্যান সঙ্গে চমত্কারভাবে কাজ rscript পেতে পরিচালিত করেছেন, কিন্তু অন্য জিনিস thats।
JAD

আপনি দুটি বাইট সংরক্ষণ করার T=Fপরিবর্তে ব্যবহার করতে পারেন a=b=0, কারণ maxবাধ্য bকরতে হবে numeric
জিউসেপ

3

থেকে ফিরে আসা সর্বদা সর্বশেষ উপাদান হবে না scanl? তাই foldl((max<*>).(+))0??
ম্যাথিয়াস

এনভিএম আমি দেখি আমার ভুল!
ম্যাথিয়াস

@ মথিয়াস আপনি যদি সম্পাদনার ইতিহাস দেখতে পান তবে আপনি দেখতে পাবেন যে আমি স্মাফ ভুল করেছি। :-)
এইচপিউইজ



2

হাস্কেল , 41 33 বাইট

import Data.List
g=maximum.concatMap(map sum.inits).tails
maximum.(scanl(+)0=<<).scanr(:)[]

এটি অনলাইন চেষ্টা করুন! লাইকোনি ধন্যবাদ


1
বেনামে ফাংশন জমা হিসাবে অনুমোদিত হয়, যাতে আপনি এটি ড্রপ করতে পারেন g=। পরিবর্তে concatMapআপনি =<<তালিকা monad থেকে ব্যবহার করতে পারেন : এটি অনলাইন চেষ্টা করুন! (33 বাইট)
লাইকনি

1

জাপট , 11 বাইট

£ãY mxÃc rw

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

£ãY mxÃc rw
m@ãY mx} c rw   // Ungolfed
m@     }        // Map the input array by the following function, with Y=index
  ãY            //   Get all subsections in input array length Y
     mx         //   Sum each subsection
         c rw   // Flatten and get max

বিকল্প পদ্ধতি, 11 বাইট

@ ইথ প্রডাকশন থেকে; ব্রুটে ফোর্সেস এর কুণ্ডলী উত্তরের উপর ভিত্তি করে ।

£sY å+Ãc rw

ইনপুট অ্যারের সমস্ত লেজ পায় এবং ক্রমবর্ধমান প্রতিটি অঙ্ক করে। তারপরে অ্যারে ফ্ল্যাট করে এবং সর্বোচ্চটি পান।

এটি অনলাইন চেষ্টা করুন!


সুন্দর, সত্যিই দুর্দান্ত। আমি আগে যখন এই চ্যালেঞ্জটি দেখেছিলাম তখন তা বাস্তবায়নের চেষ্টা করি নি, তবে আমি অন্য কোনও কৌশল সম্পর্কে চিন্তা করেছি এবং এটি 15 বাইটের কাছাকাছি আসার প্রত্যাশা করেছি, তাই এটি দুর্দান্ত।
ইটিএইচ প্রডাকশনস 13:51


@ এথ প্রডাকশনগুলি খুব সুন্দর, আমি এই উত্তরটি একটি বিকল্প পদ্ধতি হিসাবে যুক্ত করব। হুস্কের উত্তরের মতো হ্রাস / কনক্টের কিছু সংমিশ্রণের সাথেও কি এটি উন্নত করা যেতে পারে?
জাস্টিন মেরিনার

1

রুবি, 61 59 57 বাইট

আমি সবেমাত্র রুবি শিখতে শুরু করেছি, তাই আমি এটাই সামনে এলাম।

s=0
p [gets.split.map{|i|s=[j=i.to_i,s+j].max}.max,0].max

এই অসম্পূর্ণ বইটির ফিনিশ সংস্করণে আমি এই অ্যালগরিদমটি প্রথম দেখলাম । এটি 23 পৃষ্ঠায় খুব ভালভাবে ব্যাখ্যা করা হয়েছে।

এটি অনলাইন চেষ্টা করুন!


1

জাভাস্ক্রিপ্ট, 58 বাইট

m=Math.max;x=y=>eval("a=b=0;for(k of y)b=m(a=m(a+k,k),b)")

কাদানের অ্যালগরিদম জেএস বাস্তবায়ন। যতটা সম্ভব সংক্ষিপ্ত তৈরি করা হয়েছে। গঠনমূলক পরামর্শের জন্য উন্মুক্ত!

আমি এই পোস্টটি থেকে যা শিখেছি: এর রিটার্ন মান eval- যখন এটির শেষ বিধিটি একটি forলুপ হয় - মূলত ভিতরে থাকা শেষ মানটি হয় লুপের । শান্ত!

সম্পাদনা: জাস্টিন এবং হারম্যানের পরামর্শের জন্য চারটি বাইট সংরক্ষণ করা হয়েছে।


আপনি এড়াতে পারেন returnপ্রতিস্থাপন {...;return b;}সঙ্গে eval("...;b")যেহেতু Eval শেষ কথাটা ফেরৎ।
জাস্টিন মেরিনার

@ জাস্টিনমারিনার ধন্যবাদ! আমি এখানে সর্বদা নতুন কিছু শিখছি :)
গৌরাঙ্গ টন্ডন

আপনি অপসারণ করে আরও দুটি বাইট সরিয়ে ফেলতে পারেন ;b, যেহেতু এটি লুপ থেকে ফিরে এসেছে
হারমান এল

@ হারমানলাউনস্টাইন ওহ, বাহ, ধন্যবাদ, এটি দরকারী!
গৌরাঙ্গ ট্যান্ডন


0

পাইথন 2 , 52 51 বাইট

f=lambda l:len(l)and max(sum(l),f(l[1:]),f(l[:-1]))

এটি অনলাইন চেষ্টা করুন!


1
এটি বিরোধী বলে মনে হচ্ছে (অন্যথায় অপ্রয়োজনীয়) প্রয়োজনীয়তা স্টিডিন ব্যতীত অন্য কিছু পড়বেন না এবং স্টাডআউট ব্যতীত অন্য কোথাও লিখবেন না।
মিঃ এক্সকোডার



0

এপিএল, 31 29 27 বাইট

⌈/∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕

এটি অনলাইন চেষ্টা করুন!(পরিবর্তিত হয়েছে যাতে এটি ট্রাইএপিএল চলবে)

কিভাবে?

  • ∊∘.{+/W[X/⍨⍺≤X←⍳⍵]}⍨⍳⍴W←⎕ সাবভেেক্টরগুলির পরিমাণ তৈরি করুন
  • ⌈/ সর্বাধিক

0

সিজেম, 24 বাইট

q~:A,{)Aew{:+}%}%e_0+:e>

ফাংশন যা ইনপুট হিসাবে সংখ্যার অ্যারে নেয়।

এটি অনলাইনে চেষ্টা করুন

q~:A   e# Store array in 'A' variable
,{)Aew e# Get every possible sub-array of the array
{:+}%  e# Sum every sub array
}e_    e# flatten array of sums
0+     e# Add zero to the array
:e>    e# Return max value in array

0

আমার , 11 বাইট

⎕𝟚35ǵ'ƒ⇹(⍐↵

এটি অনলাইন চেষ্টা করুন!আমার এখন টিআইওতে আছে! সাব্বাস!

কিভাবে?

  • = মূল্যায়ন ইনপুট
  • 𝟚 subvectors
  • 35ǵ'= chr(0x53)(Σ, যোগফল)
  • ƒ = আমার ওয়াই ফাংশন হিসাবে স্ট্রিং
  • = মানচিত্র
  • ( = প্রয়োগ
  • = সর্বোচ্চ
  • একটি নতুনলাইন সহ = আউটপুট।

0এটি কাজ করার জন্য যোগফলটি ( খালি অ্যারেগুলিতে) স্থির করা হয়েছিল । পণ্যও স্থির ছিল।


0

জে, 12 বাইট

[:>./@,+/\\.

Zgrep এর কে সমাধানের অনুরূপ: সমস্ত প্রত্যয়গুলির স্ক্যান যোগফল (একটি ম্যাট্রিক্স উত্পাদন করে), গোলাপ, সর্বোচ্চ গ্রহণ

এটি অনলাইন চেষ্টা করুন!

বিঃদ্রঃ

খুব বেশি বাইট না পাওয়ার জন্য আপনি একটি কার্যকর সমাধান পেতে পারেন (19 বাইট গল্ফড):

[: >./ [: ({: - <./)\ +/\

0

অ্যাক্সিয়াম, 127 বাইট

f(a:List INT):Complex INT==(n:=#a;n=0=>%i;r:=a.1;for i in 1..n repeat for j in i..n repeat(b:=reduce(+,a(i..j));b>r=>(r:=b));r)

এটি ও (# এ ^ 3) আলগো হবে; আমি এটি সি ++ এক ... ফলাফল থেকে অনুলিপি করছি

(3) -> f([1,2,3,-4,-5,6,7,-8,9,10,-11,-12,-13,14])
   (3)  24
                                                    Type: Complex Integer
(4) -> f([])
   (4)  %i
                                                    Type: Complex Integer
(5) -> f([-1,-2,3])
   (5)  3
                                                    Type: Complex Integer

0

স্কালা, 105 বাইট

val l=readLine.split(" ").map(_.toInt);print({for{b<-l.indices;a<-0 to b+2}yield l.slice(a,b+1).sum}.max)

উপ তালিকার অ্যারেগুলি উত্পন্ন করার জন্য এর চেয়ে ভাল উপায় আমি খুঁজে পাইনি ।


0

জাভা 8, 242 বাইট

import java.util.*;v->{List a=new Stack();for(String x:new Scanner(System.in).nextLine().split(" "))a.add(new Long(x));int r=0,l=a.size(),i=l,j,k,s;for(;i-->0;)for(j=l;--j>1;r=s>r?s:r)for(s=0,k=i;k<j;)s+=(long)a.get(k++);System.out.print(r);}

এখানে চেষ্টা করুন।

STDIN / STDOUT প্রয়োজনীয়তা ব্যবহার না করে 106 বাইট ..>।>

a->{int r=0,l=a.length,i=l,j,k,s;for(;i-->0;)for(j=l;--j>1;r=s>r?s:r)for(s=0,k=i;k<j;s+=a[k++]);return r;}

এখানে চেষ্টা করুন।

ব্যাখ্যা:

import java.util.*;      // Required import for List, Stack and Scanner

v->{                     // Method with empty unused parameter and no return-type
  List a=new Stack();    //  Create a List
  for(String x:new Scanner(System.in).nextLine().split(" "))
                         //  Loop (1) over the STDIN split by spaces as Strings
    a.add(new Long(x));  //   Add the String converted to a number to the List
                         //  End of loop (1) (implicit / single-line body)
  int r=0,               //  Result-integer
      l=a.size(),        //  Size of the List
      i=l,j,k,           //  Index-integers
      s;                 //  Temp sum-integer
  for(;i-->0;)           //  Loop (2) from `l` down to 0 (inclusive)
    for(j=l;--j>1;       //   Inner loop (3) from `l-1` down to 1 (inclusive)
        r=               //     After every iteration: change `r` to:
          s>r?           //      If the temp-sum is larger than the current `r`:
           s             //       Set `r` to the temp-sum
          :              //      Else:
           r)            //       Leave `r` the same
      for(s=0,           //    Reset the temp-sum to 0
          k=i;k<j;)      //    Inner loop (4) from `i` to `j` (exclusive)
        s+=(long)a.get(k++);
                         //     Add the number at index `k` in the List to this temp-sum
                         //    End of inner loop (4) (implicit / single-line body)
                         //   End of inner loop (3) (implicit / single-line body)
                         //  End of loop (2) (implicit / single-line body)
  System.out.print(r);   //  Print the result to STDOUT
}                        // End of method
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.