প্রথম সদৃশ উপাদানটি সন্ধান করুন


39

একটি অ্যারে দেওয়া হয়েছে যা 1 থেকে শুরু করে দৈর্ঘ্যের দৈর্ঘ্যের মধ্যে কেবল সংখ্যা রয়েছে, প্রথম সদৃশ সংখ্যাটি খুঁজে বার করুন যার জন্য দ্বিতীয় সংখ্যার সর্বনিম্ন সূচক রয়েছে। অন্য কথায়, যদি সেখানে 1 টির বেশি সদৃশ সংখ্যা থাকে তবে দ্বিতীয় সংখ্যার দ্বিতীয় সংখ্যার চেয়ে দ্বিতীয় সংখ্যার চেয়ে কম সূচক রয়েছে এমন নম্বরটি ফিরিয়ে দিন। যদি এই জাতীয় কোনও উপাদান না থাকে তবে আপনার প্রোগ্রাম / ফাংশনটির অপরিবর্তিত আচরণ হতে পারে।

উদাহরণ:

জন্য a = [2, 3, 3, 1, 5, 2], আউটপুট হওয়া উচিত firstDuplicate(a) = 3

2 টি সদৃশ রয়েছে: সংখ্যা 2 এবং 3 3 এর দ্বিতীয় সংঘটনটি 2 এর দ্বিতীয় সংখ্যার চেয়ে ছোট সূচক রয়েছে, সুতরাং উত্তরটি 3।

জন্য a = [2, 4, 3, 5, 1], আউটপুট হওয়া উচিত firstDuplicate(a) = -1

এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।

বোনাস: আপনি ও (এন) সময়ের জটিলতা এবং ও (1) অতিরিক্ত স্থান জটিলতায় এটিকে সমাধান করতে পারেন?


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
মার্টিন এন্ডার

উত্তর:


15

পাইথন 2 , 34 বাইট

ও (এন 2 ) সময়, ও (এন) স্থান

@Vaultah এর জন্য 3 বাইট সংরক্ষণ করা হয়েছে, এবং @ xnor থেকে আরও 3 টি!

lambda l:l[map(l.remove,set(l))<0]

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


1
দেখে মনে হচ্ছে lambda l:l[map(l.remove,set(l))<0]কাজের মতো , যদিও মূল্যায়নের ক্রমটি অদ্ভুত।
xnor

-1'পাদলেখ কোড' ব্যতীত কোনও সদৃশ পাওয়া না গেলে এটি ফিরে আসে না , সেই কোডটি কি বাইটগুলির সাথে গণনা করা হয় না? আমি কোড গল্ফে নতুন, দুঃখিত যদি এটি একটি প্রাথমিক প্রশ্ন!
ক্রিস_আরেন্ডস

@ ক্রিস_আরেন্ডস প্রশ্নের নীচে সঙ্গীতজ্ঞ জিজ্ঞাসা করেছিলেন যে -1 এর পরিবর্তে ব্যতিক্রম ঠিক আছে কিনা এবং ওপি বলেছেন যে এর ঠিক আছে এবং সঙ্গীতকারীর উত্তর ব্যতিক্রম ছুঁড়েছে।
লিফডে ওয়েইন

তা বুঝতে আমার কিছুটা সময় লেগেছে। ভালো খেলেছ. শর্তসাপেক্ষে এটির পরিবর্তনের পরে 0 তম উপাদানটি পাওয়া খুব চালাক cle
Thoth19

পাইথন কি সেট.রেমভের মতো স্ট্যান্ডার্ড-লাইব্রেরি ফাংশনের সময় এবং স্থান জটিলতার গ্যারান্টি দেয়?
ড্রাকনিস

11

জাভাস্ক্রিপ্ট (ES6), 47 36 31 25 বাইট

ThePirateBay ধন্যবাদ 6 বাইট সংরক্ষণ করা

ফেরত পাঠায় undefinedযদি কোন সমাধান বিদ্যমান।

সময়ের জটিলতা: (এন) :-)
স্থান জটিলতা: (এন) :-(

a=>a.find(c=>!(a[-c]^=1))

কিভাবে?

আমরা তাদের নতুন হিসাবে সংরক্ষণ করে ইতিমধ্যে সম্মুখীন মান ট্র্যাক রাখতে বৈশিষ্ট্য মূল অ্যারের একটি ঋণাত্মক সংখ্যা ব্যবহার করে। এইভাবে, তারা সম্ভবত মূল এন্ট্রিগুলিতে হস্তক্ষেপ করতে পারে না।

ডেমো


25 বাইট:a=>a.find(c=>!(a[-c]^=1))

@ দ্য পাইরেট বে ওহ, অবশ্যই ধন্যবাদ!
আর্নৌল্ড

কেবল লক্ষ্য করুন যে জাভাস্ক্রিপ্টে থাকা অবজেক্টগুলি হ্যাশ টেবিল হিসাবে প্রয়োগ করা যেতে পারে না। কিছু বস্তুর কীগুলিতে অ্যাক্সেসের সময় জটিলতা ও (1) নাও হতে পারে।
tsh

6

গণিত, 24 বাইট

#/.{h=___,a_,h,a_,h}:>a&

ম্যাথমেটিকের প্যাটার্নের মিলের সামর্থ্য এত দুর্দান্ত!

Listঅবৈধ ইনপুটটির জন্য আসলটি ফেরত দেয় ।

ব্যাখ্যা

#/.

ইনপুটটিতে, প্রতিস্থাপন করুন ...

{h=___,a_,h,a_,h}

একটি Listসদৃশ উপাদান, আগে 0 বা আরো উপাদান মধ্যে, এবং অনুরূপ পর সঙ্গে ...

... :>a

সদৃশ উপাদান সহ।


6

জেলি , 5 বাইট

Ṛœ-QṪ

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

কিভাবে এটা কাজ করে

Ṛœ-QṪ  Main link. Argument: A (array)

Ṛ      Yield A, reversed.
   Q   Unique; yield A, deduplicated.
 œ-    Perform multiset subtraction.
       This removes the rightmost occurrence of each unique element from reversed
       A, which corresponds to the leftmost occurrence in A.
    Ṫ  Take; take the rightmost remaining element, i.e., the first duplicate of A.

œ-সঠিকতম ঘটনাগুলি সরিয়ে দেয়? টিআইএল
এরিক আউটগল্ফার

এটি কোনও নকলের জন্য ফিরে আসবে বলে মনে হচ্ছে না -1। ওপি অনুযায়ী একটি ব্যতিক্রম নিক্ষেপ করা ঠিক আছে তবে আমি নিশ্চিত নই 0যদিও এটি সীমাতে নেই।
এরিক দি আউটগল্ফার


4

জেলি , 6 বাইট

xŒQ¬$Ḣ

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

ডুপ্লিকেট না থাকলে প্রথম সদৃশ বা 0 প্রদান করে।

ব্যাখ্যা

xŒQ¬$Ḣ  Input: array M
    $   Operate on M
 ŒQ       Distinct sieve - Returns a boolean mask where an index is truthy
          for the first occurrence of an element
   ¬      Logical NOT
x       Copy each value in M that many times
     Ḣ  Head

এটা ভালো ব্যবহার ইন্ডেক্স করতে golfier আছে: ŒQi0ị
এরিক দি আউটগল্ফার

@ এরিকথ আউটগল্ফার যদি কোনও নকল না থাকে i0তবে 0 ফেরত আসবে, যেখানে ইনপুটটির শেষ মান 0
মাইল

4

জাপট , 7 বাইট

æ@bX ¦Y

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

 æ@   bX ¦ Y
UæXY{UbX !=Y}  Ungolfed
               Implicit: U = input array
UæXY{       }  Return the first item X (at index Y) in U where
     UbX         the first index of X in U
         !=Y     is not equal to Y.
               In other words, find the first item which has already occured.
               Implicit: output result of last expression

বিকল্পভাবে:

æ@¯Y øX

এটি অনলাইন পরীক্ষা!

ব্যাখ্যা

 æ@   ¯ Y øX
UæXY{Us0Y øX}  Ungolfed
               Implicit: U = input array
UæXY{       }  Return the first item X (at index Y) in U where
     Us0Y        the first Y items of U (literally U.slice(0, Y))
          øX     contains X.
               In other words, find the first item which has already occured.
               Implicit: output result of last expression

4

পাইথ, 5 বাইট

h.-Q{

পরীক্ষা স্যুট

Q থেকে প্রতিটি উপাদানের প্রথম উপস্থিতি Q থেকে সরান, তারপরে প্রথম উপাদানটি ফিরে আসুন।


লুইস মেন্ডো ঠিক আছে ধন্যবাদ বিভ্রান্তি তৈরির জন্য দুঃখিত, আমার পড়া উচিত ...
মিঃ এক্সকডার

@ মিঃ এক্সকোডার নো, এটি অপের দোষ। সেই তথ্যটি চ্যালেঞ্জ পাঠ্যে থাকা উচিত, তবে কেবল একটি মন্তব্যে
লুইস মেন্ডো

4

ডায়ালগ এপিএল, 27 24 20 19 13 12 11 বাইট

⊢⊃⍨0⍳⍨⊢=⍴↑∪

এখন v16 এর উপর নির্ভর না করে সংশোধিত! এটি অনলাইন চেষ্টা করুন!

কিভাবে? (ইনপুট এন সহ )

  • ⊢⊃⍨...- এই সূচকে এন :
    • ⍴↑∪- ডুপ্লিকেট সহ এন সরানো, ডান প্যাড সঙ্গে এন0 ফিট করতে
    • ⊢=- এন এর সাথে মৌলিক-ভিত্তিক সমতা
    • 0⍳⍨- প্রথম সূচক 0। `

কিছু নয়, আমি প্রশ্নটি ভুলভাবে পড়েছি। যদিও পর্যাপ্ত পরীক্ষার কেস নেই ...
উরিল

আপনাকে বিভ্রান্ত করার জন্য দুঃখিত, আমি প্রশ্নটি ভুলভাবে পড়েছি।
মাইল 22

আমার কাছে 36 বাইট লাগছে।
অ্যাডম

ওহ ,শ্বর, আওতা আন্ডারবার নেই ⎕AV, তাই না?
জাকারি

@ জ্যাচারý রাইট, ক্লাসিক ⎕U2378 লোড করার সময় এটিকে অনুবাদ করে । এটি অনলাইন চেষ্টা করুন!
অ্যাডম

3

পাইথন 3 , 94 92 বাইট

ও (এন) সময় এবং ও (1) অতিরিক্ত মেমরি।

def f(a):
 r=-1
 for i in range(len(a)):t=abs(a[i])-1;r=[r,i+1][a[t]<0>r];a[t]*=-1
 return r

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

অ্যালগরিদমের উত্স

ব্যাখ্যা

অ্যালগরিদমের মূল ধারণাটি হ'ল প্রতিটি উপাদানকে বাম থেকে ডানদিকে চালানো, প্রদর্শিত সংখ্যাগুলি ট্র্যাক করে রাখা এবং ইতিমধ্যে উপস্থিত একটি সংখ্যায় পৌঁছানোর পরে নম্বরটি ফিরিয়ে দেওয়া এবং প্রতিটি উপাদানকে অনুসরণ করে -1 ফিরে আসা।

তবে, এটি অতিরিক্ত স্মৃতি ব্যবহার না করে উপস্থিত হওয়া সংখ্যাগুলি সংরক্ষণ করার জন্য একটি চৌকস উপায় ব্যবহার করে: সংখ্যার সাথে সূচকযুক্ত উপাদানটির চিহ্ন হিসাবে এগুলি সংরক্ষণ করে। উদাহরণস্বরূপ, অ্যারেটি 1-সূচকযুক্ত হলে আমি সেই সত্যটি উপস্থাপন করতে পারি 2এবং 3ইতিমধ্যে উপস্থিত a[2]এবং a[3]নেতিবাচক দ্বারা উপস্থিত হয়েছি ।


iএকটি [i]> n এর জন্য এটি কী করবে ?
ডাউনগোট

@ ডাউনগোট আবার প্রশ্নটি পড়ুন।
ফাঁস নুন

প্রশ্নটি 1দৈর্ঘ্যে বলে তবে একটি [i] = a.leight এর জন্য কি এই সীমা ছাড়বে না?
ডাউনগোট

@ ডাউনগোটt=abs(a[i])-1=a.length-1
লিকি নুন


3

পার্ল 6 , 13 বাইট

*.repeated[0]

চেষ্টা করে দেখুন


ব্যাখ্যা

  • *একটি শব্দ অবস্থানে তাই পুরো বক্তব্য হল WhateverCode ল্যামডা।

  • এটি .repeatedএমন একটি পদ্ধতি যা প্রতিটি মান প্রথমবার দেখা ব্যতীত প্রতিটি মানকেই ফলাফল করে।

    say [2, 3, 3, 3, 1, 5, 2, 3].repeated.perl; # (3, 3, 2, 3).Seq
    #   (      3, 3,       2, 3).Seq
  • [0]সেকের মধ্যে প্রথম মানটি প্রদান করে ।
    মান না থাকলে নীল ফিরিয়ে দেওয়া হয়।
    ( নিল হ'ল ব্যর্থতার ধরণগুলির ভিত্তি , এবং সমস্ত প্রকারগুলি তাদের নিজস্ব অপরিজ্ঞাত মান, তাই নীল বেশিরভাগ অন্যান্য ভাষায় অপরিবর্তিত মানের চেয়ে আলাদা)


নোট করুন যেহেতু একটি সেক বাস্তবায়নের.repeated অর্থ হল যে আপনি কোনও মূল্য জিজ্ঞাসা না করা অবধি কোনও কাজ করা শুরু করে না এবং আপনি যা চান তা উত্পন্ন করতে কেবল এটি যথেষ্ট কাজ করে। সুতরাং তর্ক করা সহজ হবে যে এটিতে সবচেয়ে খারাপ O (n)  সময় জটিলতা রয়েছে এবং সর্বোত্তম হে (2)  সময়ের জটিলতা যদি দ্বিতীয় মান প্রথমটির পুনরাবৃত্তি হয়। অনুরূপ সম্ভবত স্মৃতি জটিলতার কথা বলা যেতে পারে।


3

এপিএল (ডায়ালগ) , 20 বাইট

n/⍨(,≢∪)¨,\n←⎕,2⍴¯1

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

2⍴¯1 negative ণাত্মক এক আর একটি দৈর্ঘ্য-দুটি তালিকায় অন্তর্ভুক্ত

⎕, ইনপুট পান (মেমোনিক: কনসোল বাক্স) এবং এটিতে প্রিপেন্ড করুন

n←এন  যে স্টোর

,\n এর  উপসর্গ (লিটল। ক্রমসংগঠন)

( প্রতিটি উপসর্গের জন্য নিম্নলিখিত ট্যাসিট ফাংশন প্রয়োগ করুন

, [অভ্যাস] হ'ল (কেবলমাত্র উপস্থাপিকাটি একটি তালিকা রয়েছে তা নিশ্চিত করে)

 অন্য রকম

 অনন্য উপাদানসমূহ [?] (অর্থাত্ উপসর্গটির নকল রয়েছে কি?)

n/⍨ ব্যবহার ফিল্টার এন (প্রথম পর্যন্ত সব উপাদান, যার জন্য একটি ডুপ্লিকেট পাওয়া যায়নি সরিয়ে ফেলা হবে)

 যে থেকে প্রথম উপাদান বাছাই


বাহ, আপনি তিনবার পরাজিত হয়েছে। তবুও, +1। এবং আপনি কীভাবে এটি কাজ করে তার একটি ব্যাখ্যা যুক্ত করতে পারেন?
জাকারি

@ জ্যাচারý স্পষ্টতই আমার বল রোলিংয়ের দরকার ছিল। আপনি এখানে যান।
অ্যাডম


3

এপিএল (ডায়ালগ) , 11 বাইট

অনুযায়ী নতুন নিয়ম , একটি ত্রুটি ছোঁড়ার কোন সদৃশ বিদ্যমান।

⊢⊃⍨⍬⍴⍳∘≢~⍳⍨

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

⍳⍨ প্রতিটি উপাদান প্রথম ঘটনা সূচক

~ থেকে সরানো

⍳∘≢ সমস্ত সূচকের

⍬⍴ এটি একটি স্কেলারে পুনরায় আকার দিন (কোনও ডেটা উপলব্ধ না হলে শূন্য দেয়)

⊃⍨ থেকে বাছাই করতে ব্যবহার করুন (শূন্যে ত্রুটি দেয়)

 যুক্তি


ঠিক আছে, হ্যাঁ, যখন নিয়মগুলি পরিবর্তন করা হয়, অবশ্যই আপনি তাদের সমস্তকে পরাজিত করতে পারেন!
জাকারি

ঠিক আছে, আমি আপনাকে বেঁধেছি।
Zachar

3

এপিএল, 15

{⊃⍵[(⍳⍴⍵)~⍵⍳⍵]}

দেখে মনে হচ্ছে যে কোনও ডুপ্লিকেট না থাকলে আমরা -1 এর পরিবর্তে 0 ফিরতে পারি, (মন্তব্যের জন্য আদমকে ধন্যবাদ)। তাই 3 বাইট কম।

কিছুটা বর্ণনা:

⍵⍳⍵         search the argument in itself: returns for  each element the index of it's first occurrence
(⍳⍴⍵)~⍵⍳⍵   create a list of all indexes, remove those found in ⍵⍳⍵; i.e. remove all first elements
⊃⍵[...]     of all remaining elements, take the first. If the array is empty, APL returns zero

রেফারেন্সের জন্য, পুরানো সমাধানটি তালিকায় শেষে -1 যুক্ত হয়েছে, সুতরাং যদি তালিকাটি খালি শেষ হয় তবে এর পরিবর্তে -1 থাকে এবং প্রথম উপাদানটি -1 হয়।

{⊃⍵[(⍳⍴⍵)~⍵⍳⍵],¯1}

এটি ব্যবহার করে দেখুন tryapl.org



3

রেটিনা , 26 24 বাইট

1!`\b(\d+)\b(?<=\b\1 .*)

এটি অনলাইন চেষ্টা করুন! ব্যাখ্যা: \b(\d+)\bপ্রতিটি সংখ্যার ঘুরে দেখা যায়, এবং তারপরে চেহারাটি নম্বরটি সদৃশ কিনা তা দেখার জন্য; এটি যদি 1মিল হয় !তবে ম্যাচের সংখ্যা গণনা না করে আউটপুট হয়। দুর্ভাগ্যক্রমে চেহারাটির পিছনে রাখার কাজটি মনে হচ্ছে না, অন্যথায় এটি বেশ কয়েকটি বাইট সংরক্ষণ করতে পারে। সম্পাদনা করুন: কোনও মিল নেই ফেরতের মান মেনে চলতে 7 বাইট যুক্ত করা হয়েছে -1@ মার্টিনএেন্ডারকে ধন্যবাদ 2 বাইট সংরক্ষিত


2
রেকর্ডের জন্য, চেহারাটি ব্যাকট্র্যাক করবে না। আপনি যদি এটির আগে রাখার চেষ্টা করেন তবে এটি কাজ করতে বাধা দেয়। আমি এই ভুলটি বহুবার করেছি এবং মার্টিন সর্বদা আমাকে সংশোধন করে।
FryAmTheEggman

আমি লম্বা পিছনের দিকের পরিবর্তে লুকোহেড ব্যবহার করে 30 বাইট পেয়েছি। এছাড়াও, নিয়মগুলি এখন বলেছে যে আপনাকে আর ফেরার দরকার নেই -1
মূল্য কালি

@ ভালিউইঙ্ক তবে সেই পরীক্ষার মামলার সঠিক উত্তরটি 3 ...
নীল

উহু. আমি চ্যালেঞ্জটি ভুলভাবে লিখেছি, ওফস
মান

2

এমএটিএল , 8 বাইট

&=Rsqf1)

কোনও সদৃশ উপস্থিত না থাকলে একটি ত্রুটি (আউটপুট ছাড়াই) দেয়।

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

ব্যাখ্যা

&=   % Implict input. Matrix of all pairwise equality comparisons
R    % Keep the upper triangular part (i.e. set lower part to false)
s    % Sum of each column
q    % Subtract 1
f    % Indices of nonzero values
1)   % Get first. Gives an error is there is none. Implictly display

2

আর, 34 বাইট

c((x=scan())[duplicated(x)],-1)[1]

@Jjurio থেকে উত্তরটি কয়েকটি অক্ষর কেটে ফেলুন, যদিও মন্তব্য করার মতো যথেষ্ট খ্যাতি নেই।


ওহ ... আমি এই উত্তরটি দেখিনি; এটি পূর্বের অনুমানের জন্য ভাল যখন অনুপস্থিত মানগুলি প্রয়োজন হয় -1তবে নতুন অনুমানের সাথে, আমি এটিকে আরও বেশি গল্ফ করতে সক্ষম করেছিলাম। এটি এখনও দৃ is় এবং তিনি যেভাবে করেছিলেন তার থেকে এটি ভিন্ন পদ্ধতির, সুতরাং আমি আপনাকে একটি +1 দেব!
জিউসেপে

2

জে, 17 16 বাইট

(*/{_1,~i.&0)@~:

কিভাবে?

(*/{_1,~i.&0)@~:

             @~: returns the nub sieve which is a vector with 1 for the first occurrence of an element in the argument and 0 otherwise

        i.&0     returns the first index of duplication

    _1,~         appends _1 to the index

 */              returns 0 with duplicates (product across nub sieve)

     {           select _1 if no duplicates, otherwise return the index

2

আর , 28 বাইট

(x=scan())[duplicated(x)][1]

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


আমি মনে করি যে আপনি এখন NAঅনুপস্থিত মানগুলির জন্য ফিরে আসতে পারেন যেহেতু চশমাটি পরিবর্তিত হয়েছে; সুতরাং (x=scan())[duplicated(x)][1]পুরোপুরি বৈধ।
জিউসেপে


2

ডায়ালগ এপিএল ক্লাসিক, 18 টি অক্ষর

শুধুমাত্র কাজ করে ⎕IO←0

     w[⊃(⍳∘≢~⍳⍨)w←¯1,⎕]

"-1" চাপের সাথে তার নবের তালিকা সূচকগুলির সাথে যুক্তির উপাদানগুলির সূচকগুলির তালিকা থেকে সরান এবং তারপরে যা বাকী থাকে তার প্রথমটি চয়ন করুন। অপসারণের পরে যদি কেবল খালি ভেক্টর থেকে যায় তবে এর প্রথম উপাদানটি সংজ্ঞা 0 দ্বারা ব্যবহৃত হয় যা পছন্দসই -1 উত্পাদিত বর্ধিত যুক্তিকে সূচক হিসাবে ব্যবহার করা হয়।


উম ... এলোমেলো শীর্ষস্থানীয় জায়গাগুলি কী? আমাকে এক বাইট করে আউটগল্ফ করার জন্য +1 ।
জাকারি

আপনি ফিরে আসার পরিবর্তে একটি ত্রুটি¯1 ফেলতে পারেন, যাতে আপনি মুছে ফেলতে ¯1,এবং ব্যবহার করতে পারেন ⎕IO←1
অ্যাডম


2

জাভা (ওপেনজেডিকে 8) , 65 117 109 বাইট

পূর্ববর্তী 65 বাইট সমাধান:

r->{for(int a,b=0,z,i=0;;b=a)if((a=b|1<<(z=r[i++]))==b)return z;}

নতুন সমাধান। 19 বাইট জন্য অন্তর্ভুক্ত করা হয়import java.math.*;

-8 বাইটস @ নেভায়েকে ধন্যবাদ

r->{int z,i=0;for(BigInteger c=BigInteger.ZERO;c.min(c=c.setBit(z=r[i++]))!=c;);return z;}

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

সম্পাদন করা

আমার আসল প্রোগ্রামে অ্যালগরিদম ভাল ছিল, তবে ব্যবহৃত ডেটাটাইপের স্থির আকারের অর্থ দাঁড়ায় যে আকারটি একটি নির্দিষ্ট প্রান্তিকের উপরে গেলে এটি মোটামুটি দ্রুত ভেঙে যায়।

এটিকে সামঞ্জস্য করার জন্য প্রোগ্রামটির মেমরি সীমা বাড়ানোর জন্য আমি গণনায় ব্যবহৃত ডেটাটাইপ পরিবর্তন করেছি ( বা এর BigIntegerপরিবর্তে স্বেচ্ছাসেবী জন্য ব্যবহার করে )। যাইহোক, এটি এটিকে স্থান জটিলতা হিসাবে গণ্য করে কিনা তা বিতর্কযোগ্য করে তোলে ।intlongO(1)

আমি আমার ব্যাখ্যাটি অক্ষত নীচে রেখে দেব, তবে আমি যুক্ত করতে চাই যে আমি এখন বিশ্বাস করি যে O(1)কিছু অনুমান না করেই স্থান জটিলতা অর্জন করা অসম্ভব ।

প্রমাণ

Nযেমন একটি পূর্ণসংখ্যা হিসাবে সংজ্ঞায়িত করুন 2 <= N

আসুন Sএকটি তালিকা এলোমেলো পূর্ণসংখ্যার প্রতিনিধিত্ব করে এমন একটি তালিকা [x{1}, ..., x{N}], যেখানে x{i}সীমাবদ্ধতা রয়েছে 1 <= x{i} <= N

উপাদান তালিকাতে একবারে এই তালিকাটি পুনরাবৃত্তি করার জন্য প্রয়োজনীয় সময় জটিলতা (বিগ-ও স্বরলিপিতে) O(n)

প্রদত্ত চ্যালেঞ্জটি হ'ল তালিকার প্রথম নকল মান খুঁজে পাওয়া। আরও সুনির্দিষ্টভাবে, আমরা এটির মধ্যে প্রথম মানটির সন্ধান করছি Sতালিকার পূর্ববর্তী আইটেমটির সদৃশ।

আসুন pএবং qতালিকার দুটি উপাদানের অবস্থান যেমন p < qএবং এটি x{p} == x{q}। আমাদের চ্যালেঞ্জ qএই শর্তগুলিকে সন্তুষ্টকারী সবচেয়ে ক্ষুদ্রতম সন্ধানে পরিণত হয় ।

এই সমস্যার স্পষ্ট দৃষ্টিভঙ্গি হ'ল এস এর মাধ্যমে পুনরাবৃত্তি হওয়া x{i}এবং অন্য তালিকায় আমাদের উপস্থিত রয়েছে কিনা তা যাচাই করা T: যদি x{i}এটি উপস্থিত না থাকে তবে Tআমরা এটি সংরক্ষণ করি T। যদি এর x{i}মধ্যে বিদ্যমান থাকে Tতবে এটি প্রথম সদৃশ মান এবং তাই সবচেয়ে ছোট qএবং এর মতো আমরা এটি ফিরিয়ে আনি। এই স্থান দক্ষতা হয় O(n)

সময়ের জটিলতা O(1)বজায় রেখে স্পেস জটিলতা অর্জনের জন্য O(n), আমাদের প্রতিটি বস্তুর সম্পর্কে স্বতন্ত্র পরিমাণের একটি সীমিত পরিমাণে তালিকায় রাখতে হবে। এই কারণে, কোনও অ্যালগরিদম কেবলমাত্র সঞ্চালন করতে পারেO(1)স্পেস জটিলতা হ'ল: 1. নির্দিষ্ট সীমাবদ্ধ ডেটাটাইপের জন্য সম্ভাব্য মানগুলির সর্বাধিক সংখ্যক সঞ্চয় করার জন্য প্রয়োজনীয় মেমরির সাথে সংশ্লিষ্ট একটি উচ্চতর বাউন্ড দেওয়া হয়। ২.এক একক অপরিবর্তনীয় ভেরিয়েবলের পুনরায় বরাদ্দকরণ জটিলতার সাথে গণনা করা হয় না, কেবলমাত্র ভেরিয়েবলের সংখ্যা (একাধিক ভেরিয়েবলের একটি তালিকা)। ৩. (অন্যান্য উত্তরের উপর ভিত্তি করে) তালিকাটি (বা কমপক্ষে, তালিকার উপাদানগুলি হ'ল) ​​পরিবর্তনযোগ্য এবং তালিকার ডাটাবেটকে স্বাক্ষরিত পূর্ণসংখ্যা হিসাবে পূর্বনির্ধারিত হয়, তালিকায় আরও উপাদানগুলিতে পরিবর্তন আনতে দেওয়া হয় অতিরিক্ত মেমরি ব্যবহার না করে।

1 এবং 3 উভয়ই ডেটাটাইপ সম্পর্কে অনুমান এবং বিশদ প্রয়োজন, অন্যদিকে 2 এর প্রয়োজন কেবলমাত্র সেই ভেরিয়েবলের আকারের পরিবর্তে স্থানের জটিলতার গণনার জন্য ভেরিয়েবলের সংখ্যা বিবেচনা করা উচিত। যদি এই অনুমানগুলির কোনও গ্রহণ না করা হয় তবে O(n)সময় জটিলতা এবং O(1)স্থান জটিলতা উভয়ই অর্জন করা অসম্ভব ।

ব্যাখ্যা

হু ছেলে, এই একজন কিছুটা মস্তিষ্কের শক্তি চিন্তা করতে একটি বিব্রতকরভাবে দীর্ঘ সময় নিয়েছিল ।

সুতরাং, বোনাসের জন্য যাওয়া কঠিন। আমাদের দু'জনেরই পুরো তালিকাটি ঠিক একবারে পরিচালনা করতে হবে এবং অতিরিক্ত স্থানের জটিলতা ছাড়াই আমরা ইতিমধ্যে কোন মানগুলি পুনরুক্ত করেছি তা ট্র্যাক করতে হবে।

বিট ম্যানিপুলেশন সেই সমস্যাগুলি সমাধান করে। আমরা আমাদের O(1)'স্টোরেজ', এক জোড়া পূর্ণসংখ্যার শুরু করি, তারপরে তালিকার মধ্য দিয়ে পুনরাবৃত্তি করি, বা আমাদের প্রথম পূর্ণসংখ্যার মধ্যে ith বিটটি আইএন-ইন করি এবং ফলাফলটি দ্বিতীয়টিতে সংরক্ষণ করি।

উদাহরণস্বরূপ, যদি আমাদের থাকে 1101এবং আমরা এর সাথে একটি ওআর অপারেশন 10করি তবে আমরা পাই 1111। আমরা যদি অন্য একটি দিয়ে বা 10করি তবে আমাদের এখনও আছে 1101

তবে, একবার আমরা OR ক্রিয়াকলাপটি সম্পাদন করে একই সংখ্যার সাথে সমাপ্ত হলে আমরা আমাদের সদৃশটি খুঁজে পেয়েছি। অ্যারেতে কোনও সদৃশ হওয়ার কারণে প্রোগ্রামটি চালু হয়ে যায় এবং একটি ব্যতিক্রম ছুঁড়ে দেয়।


এছাড়াও, আপনার দ্বিতীয় পরীক্ষায় 100 নম্বর রয়েছে তবে এটি অসম্ভব যেহেতু অ্যারে কেবল 5 দীর্ঘ
স্কুলবয়

এছাড়াও, এটি ব্যর্থ হয় যেহেতু কোনও ইন্টের পর্যাপ্ত স্টোরেজ নেই।
স্কুলবয়

পছন্দ করেছেন আমার একমাত্র সমস্যাটি হ'ল অ্যারের আকারের উপরের কোনও সীমা নেই বলে মনে হয়, তাই আমি মেমরির সমস্যাগুলি সমাধান করার জন্য আমার কোডটি বাস্তবিকভাবে পরিবর্তন করতে পারি না।
Xenderhall

@ এক্সান্দ্রহাল সত্য, তবে আমি 32 (বা আপনি যদি দীর্ঘ, 64 ব্যবহার করেন) সংখ্যাটি খুব কম বলে মনে হয়: পি। যে কোনও উপায়ে, ইনপুটটিতে সীমাবদ্ধতা আরোপ করা এবং তারপরে প্রয়োজনীয় সর্বাধিক মেমরির বরাদ্দ করা এবং এটিকে ও (1) মেমরি বলা কেবল একটি প্রতারণা। ইনপুটটির আকারটি যদি বাড়তে থাকে তবে এটি এখনও ও (এন), তাই এই উপরেরটি মেমোরিতে আবদ্ধ হয়। যে কারণেই আমি মনে করি যে ও (এন) ও (1) অ্যালগরিদম তৈরি করা অসম্ভব
স্কুলবয়ে

@ এক্সান্দারহল পিএস আমি আপনার 65 এর কাছাকাছি আসছি, আমি 67 বাইটে রয়েছি: পি
স্কুলবয়ে

2

পিএইচপি, 56 44 38 32 বাইট

for(;!${$argv[++$x]}++;);echo$x;

এভাবে চালান:

php -nr 'for(;!${$argv[++$x]}++;);echo$x;' -- 2 3 3 1 5 2;echo
> 3

ব্যাখ্যা

for(
  ;
  !${                 // Loop until current value as a variable is truthy
    $argv[++$x]       // The item to check for is the next item from input
  }++;                // Post increment, the var is now truthy
);
echo $x;              // Echo the index of the duplicate.

বদলান

  • অ্যারের পরিবর্তে ভেরিয়েবল ব্যবহার করে 12 বাইট সংরক্ষণ করা হয়েছে
  • যখন কোনও মিল নেই তখন "অপরিজ্ঞাত আচরণ" বিধিটি ব্যবহার করে 6 বাইট সংরক্ষণ করা হয়েছে।
  • প্রতিটি লুপের পরে 1 এ সেট করার পরিবর্তে পোস্ট-ইনক্রিমেন্ট ব্যবহার করে 6 বাইট সংরক্ষণ করা হয়েছে

জটিলতা

কোডটির মন্তব্য করা সংস্করণ থেকে যেমন দেখা যায়, সময় জটিলতা রৈখিক O(n)। মেমরির ক্ষেত্রে, সর্বাধিক n+1ভেরিয়েবল বরাদ্দ করা হবে। সুতরাং যে O(n)


একটি অদ্ভুত এনকোডিং ব্যবহার না করার জন্য ধন্যবাদ। তবে আপনার error_reportingবাইট কাউন্টে বিকল্পটি যুক্ত করা উচিত (বা ব্যবহার করুন -nযা নিখরচায়)।
তিতাস

আমরা এখানে আগে ছিলাম। পিএইচপি বিজ্ঞপ্তি এবং সতর্কতা অবহেলা করা হয়। আমি পাশাপাশি তাদের পাইপ করতে পারেন /dev/null, যা একই।
13

আমি ভুল মন্তব্য মনে রাখার ঝোঁক। :) এই ও (এন) না?
তিতাস

হ্যাঁ এটি লিনিয়ার
13

কিভাবে O(1)অতিরিক্ত স্থান জন্য এটি? আপনি আক্ষরিক অর্থে একটি নতুন ভেরিয়েবল নির্ধারণ করছেন n, যা হ'লO(n)
Xenderhall

2

জাভা 8, 82 78 76 বাইটগুলি আর কার্যকর হবে না, 75 67 64 বাইট নীচে সম্পাদনায়

ল্যাম্বদা ফাংশন হিসাবে:

a->{Set<Long>s=new HashSet<>();for(long i:a)if(!s.add(i))return i;return-1;}

সম্ভবত আরও ছোট তৈরি করা যেতে পারে, এটি খুব দ্রুত ছিল।

ব্যাখ্যা:

a->{                                //New lambda function with 'a' as input
    Set<Long>s=new HashSet<>();     //New set
    for(long i:a)                   //Iterate over a
        if(!s.add(i))               //If can't add to s, already exists
            return i;               //Return current value
        return-1;                   //No dupes, return -1
}

* সম্পাদনা করুন *

অবহেলা কৌশল ব্যবহার করে 75 67 64 বাইট:

a->{int i=0,j;while((a[j=Math.abs(a[i++])-1]*=-1)<0);return++j;}

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

(-3 বাইট @ নেভায়ে ধন্যবাদ)

ব্যাখ্যা:

a->{                                         //New lambda expression with 'a' as input
    int i=0,j;                               //Initialise i and declare j
    while((a[j=Math.abs(a[i++])-1]*=-1)<0);  //Negate to keep track of current val until a negative is found
    return++j;                               //Return value
}

অ্যারে উপর লুপ, ট্র্যাক রাখা অবহেলা। যদি কোনও ডুপস না থাকে তবে কেবল চালিয়ে যায় এবং একটি ত্রুটি নিক্ষেপ করে।

এই উভয়ই ও (এন) সময় এবং ও (এন) স্থান জটিলতায় কাজ করে।


এটি লক্ষণীয় যে এটি একটি ল্যাম্বদা ফিরতে নিয়োগের প্রয়োজন হবে Number, যেহেতু iএটি একটি longএবং -1একটি int
জাকব

@ জাকোব প্রয়োজনীয় নয়, -1 প্রাক্তন হওয়ার কারণে স্পষ্টভাবে কাস্টটি নির্দিষ্ট করে না দিয়ে স্বয়ংক্রিয়ভাবে একটি দীর্ঘদেহে ফেলে দেওয়া হবে
স্কুলবয়

এটি অন্তর্নিহিতভাবে castালাই করবে long, তবে Longল্যাম্বডা এ-এর জন্য নির্ধারিত হবে না Function। আপনি এটি পরীক্ষা করেছেন? নির্বিশেষে, সমাধানটি আপনার নতুন সাথে প্রতিস্থাপন করা যেতে পারে।
জাকব

আপনি Set s=new HashSet();7 টি বাইট সংরক্ষণের জন্য কাঁচা ধরণের ব্যবহার করতে পারেন । (এছাড়াও: আফাইক আমদানিটি java.util.*;বাইট গণনা -> +১৯ বাইটে অন্তর্ভুক্ত করতে হবে)) রিটার্নের বিবৃতি হতে পারে return++j, যদি-বিবৃতিটি সরানো যায় a->{int i=0,j;for(;(a[j=Math.abs(a[i++])-1]*=-1)<0;);return++j;}(-৩ বাইট)।
নেভায়ে

2

ব্র্যাচল্যাগ , 5 বাইট

a⊇=bh

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

ব্যাখ্যা

a⊇=bh  Input is a list.
a      There is an adfix (prefix or suffix) of the input
 ⊇     and a subsequence of that adfix
  =    whose elements are all equal.
   b   Drop its first element
    h  and output the first element of the rest.

অন্তর্নির্মিত অ্যাডফিক্স aদৈর্ঘ্যের ক্রমবর্ধমান ক্রমে সমস্ত উপসর্গের তালিকা তৈরি করে , তারপরে দৈর্ঘ্যের ক্রম হ্রাসে প্রত্যয়কে তালিকাবদ্ধ করে। সুতরাং আউটপুট সংক্ষিপ্ত উপসর্গ দ্বারা উত্পাদিত হয় যা এটির অনুমতি দেয়, যদি থাকে তবে। যদি উপসর্গের কোনও ডুপ্লিকেট না থাকে তবে বাকি প্রোগ্রামটি ব্যর্থ হয়, যেহেতু সমান উপাদানের প্রতিটি অনুপাতের দৈর্ঘ্য 1 থাকে এবং এর লেজের প্রথম উপাদানটির অস্তিত্ব থাকে না। যদি একটি উপসর্গের একটি পুনরাবৃত্তি উপাদান থাকে, আমরা উভয় সমন্বিত দৈর্ঘ্য -2 অনুচ্ছেদটি চয়ন করতে পারি, এবং প্রোগ্রামটি পরবর্তীটি প্রদান করে।


আরও 5 টি বাইট সমাধান: a⊇Ċ=hযা কেবল দৈর্ঘ্য -2 উপগ্রহের দিকে দেখায়।
ফ্যাটালাইজ করুন

1

সি #, 145 বাইট

using System.Linq;a=>{var d=a.Where(n=>a.Count(t=>t==n)>1);return d.Select((n,i)=>new{n,i}).FirstOrDefault(o=>d.Take(o.i).Contains(o.n))?.n??-1;}

সাধারণ লুপের সাহায্যে সি # তে এটি করার জন্য সম্ভবত একটি খুব ছোট উপায় তবে আমি লিনক দিয়ে এটি চেষ্টা করতে চেয়েছিলাম।

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

সম্পূর্ণ / ফর্ম্যাট সংস্করণ:

namespace System.Linq
{
    class P
    {
        static void Main()
        {
            Func<int[], int> f = a =>
            {
                var d = a.Where(n => a.Count(t => t == n) > 1);
                return d.Select((n, i) => new { n, i }).FirstOrDefault(o => d.Take(o.i).Contains(o.n))?.n ?? -1;
            };

            Console.WriteLine(f(new[] { 2, 3, 3, 1, 5, 2 }));
            Console.WriteLine(f(new[] { 2, 4, 3, 5, 1 }));

            Console.ReadLine();
        }
    }
}

এখানে সরল লুপ সংস্করণ। তবে আমি লিনক সংস্করণটি আরও পছন্দ করি।
লিফডেভেন

@ লিফডওয়েইন এটির উত্তর হিসাবে পোস্ট করুন :) যদিও আমি সাধারণত লিনককেও বেশি পছন্দ করি :) লিঙ্কের সাথেও এটি আরও ছোট হতে পারে তবে আমি এখন নিশ্চিত।
TheLethalCoder

নাহ, এই প্রশ্নটি জনবহুল এবং আমি আপনাকে এই প্রশ্নের জন্য আপ-ভোট পেতে চাই।
লিফডওয়েভেন

1

হাস্কেল , 78 69 বাইট

 fst.foldl(\(i,a)(j,x)->(last$i:[j|i<0,elem x a],x:a))(-1,[]).zip[1..]

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

@ নিমিকে ধন্যবাদ 9 বাইট সংরক্ষণ করা হয়েছে

তালিকার মধ্য দিয়ে একটি প্রাথমিক পথ। যদি বর্তমান উপাদানটি এখনও দেখা যায় না ( i<0) এবং সঞ্চয়ের তালিকায় থাকে ( elem x a) তবে বর্তমান সূচকটি সংরক্ষণ করুন। অন্যথায় সূচি -১ রাখুন 1 যে কোনও ক্ষেত্রে, বর্তমান উপাদানটিকে সঞ্চয়ের তালিকায় যুক্ত করুন।

সম্পাদনা : আমি যথেষ্ট মনোযোগ দিয়ে প্রশ্নটি পড়িনি: এই কোডটি সদৃশ উপাদানের দ্বিতীয় উপাদানটির সূচককে আউটপুট করে।


আপনি ব্যবহার করতে পারেন "অপেক্ষাকৃত ছোট শর্তসাপেক্ষ" আমাদের থেকে "মধ্যে Haskell golfing জন্য টিপস" : \ ... ->(last$i:[j|i<0,elem x a],x:a)। এছাড়াও: প্রয়োজন নেই f=, কারণ নামহীন ফাংশন অনুমোদিত allowed
নিমি

@ নিমির টিপটির জন্য ধন্যবাদ!
jferard

1

পাইথন 2, 71 65 বাইট

রিটার্নস Noneযদি কোন সদৃশ উপাদান

সম্পাদনা করুন: -6 বাইটস @ মিউজিকম্যান 523 কে ধন্যবাদ

def f(n):
 for a in n:
	u=-abs(a)
	if n[u]<0:return-u
	n[u]=-n[u]

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

ও (এন) সময়ের জটিলতা, ও (এন) স্পেস জটিলতা, ও (1) সহায়ক স্থান।

ইনপুট তালিকাটি O (n) স্পেস ব্যবহার করার সাথে সাথে স্থান জটিলতা এটি দ্বারা আবদ্ধ। অর্থ আমাদের ও (এন) এর চেয়ে কম স্থান জটিলতা থাকতে পারে না

মূল তালিকাটি সংশোধন করে, যদি এটির অনুমতি না দেওয়া হয় তবে আমরা এটি একই জটিলতায় 129 বাইট সহ করতে পারি

ব্যাখ্যা

যেহেতু প্রতিটি উপাদান 0 এর চেয়ে বড় এবং তালিকার আকারের চেয়ে কম বা সমান, তাই তালিকাটিতে প্রতিটি উপাদান a, সূচকে একটি উপাদান - 1 (0 সূচকযুক্ত) থাকে। আমরা সূচক i এর উপাদানটি নেতিবাচক হলে, আমরা এটি আগে দেখেছি by

তালিকার এন তালিকার প্রতিটি উপাদানের জন্য, আমরা আপনাকে একটি এর পরম মানটিকে নেতিবাচক হতে দেব। (পাইথনটি নেতিবাচক সূচকে তালিকা তৈরি করতে পারে বলে আমরা একে নেতিবাচক হতে দিই, এবং আমাদের অন্যথায় এটি করা দরকার u=abs(a)-1 ) তালিকার ইউ সূচকের উপাদানটি যদি নেতিবাচক হয় তবে আমরা এটি আগেও দেখেছি এবং সুতরাং ফিরে আসতে পারি (পাওয়ার জন্য এর যথার্থ মান যেমন সমস্ত উপাদান ধনাত্মক হয়) । অন্যথায় আমরা সূচক u এ উপাদানটি negativeণাত্মক হিসাবে সেট করেছিলাম, মনে রাখবেন যে আমরা এর আগে কোনও মানের একটি উপাদান দেখেছি।


সুন্দর কাজ! 65 বাইট
সঙ্গীতজ্ঞ 523

আপনি কি নিশ্চিত যে এটি মেমরির ও (1) ? আপনি কী সংখ্যাটি ইতিমধ্যে পরিদর্শন করেছেন তা সংরক্ষণ করতে এখনও মেমরির বি বিট ব্যবহার করছেন, যদিও বিটগুলি সাইন ইন রয়েছে। আমার কাছে মনে হচ্ছে এটি ছদ্মবেশে ও (এন)
গম উইজার্ড

প্রযুক্তিগতভাবে এটি ও (এন) স্পেস ব্যবহার করে - এন সাইন বিট। অ্যারে যদি কেবল 1এবং nকীভাবে এটি দেওয়া হয়েছিল তার মধ্যে মানগুলি ধরে রাখতে পারে তবে স্পষ্টতই এটি কার্যকর হয় না।
অলিভার Ni

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.