คำถามติดแท็ก restricted-complexity

ความท้าทายด้วยสเป็คที่ต้องใช้คำตอบทั้งหมดเพื่อให้บรรลุข้อ จำกัด ด้านเวลาที่ซับซ้อน นี่อาจเป็นเรื่องเฉพาะ ("คำตอบของคุณต้องเป็น O (n ^ 2) โดยที่ n คือจำนวนรายการในอินพุต") หรือที่ระดับความซับซ้อนของคลาส ("คำตอบของคุณต้องเป็นพหุนามในจำนวนรายการใน การป้อนข้อมูล ")

4
รหัสสีเทาทั่วไป
อินพุต:อาร์เรย์Iของจำนวนเต็มบวกk จำนวนเต็มจะมีขนาดไม่เกิน 100 k ≤ 100 เอาท์พุท:อาร์เรย์เป็นไปได้ทั้งหมดต้องรหัสการส่งออกของคุณOของจำนวนเต็มไม่ใช่เชิงลบของความยาวkกับข้อ จำกัด ที่0 ≤ O ฉัน ≤ฉันฉัน ที่จะได้รับจากอาร์เรย์หนึ่งไปยังอีกคุณสามารถเพิ่มหรือลบ 1 ถึงหนึ่งมูลค่าในอาร์เรย์ รหัสของคุณจะต้องไม่ส่งออกอาร์เรย์เดียวกันสองครั้ง หากจำนวนของอาร์เรย์ที่แตกต่างกันที่จะส่งออกมีขนาดใหญ่มากรหัสของคุณควรดำเนินการในการส่งออกตลอดไปจนกว่าจะถูกฆ่าตาย ตัวอย่าง ถ้าฉันเป็นอาร์เรย์ของkแล้วนี่เป็นปัญหาของการวนซ้ำรหัสสีเทาทั้งหมดของความกว้างบิตkยกเว้นว่าองค์ประกอบแรกและองค์ประกอบสุดท้ายไม่จำเป็นต้องเข้าถึงได้ในขั้นตอนเดียว ถ้าI = [2,1]เป็นไปได้การเรียงลำดับของเอาต์พุตเอาท์พุตอย่างใดอย่างหนึ่งคือ(0,0),(0,1),(1,1),(1,0),(2,0),(2,1) หากแล้วหนึ่งการสั่งซื้อเป็นไปได้ของอาร์เรย์ออกเป็นI = [2,1,3](0,0,0),(0,0,1),(0,0,2),(0,0,3),(0,1,3),(0,1,2),(0,1,1),(0,1,0),(1,1,0),(1,1,1),(1,1,2),(1,1,3),(2,1,3),(2,1,2),(2,1,1),(2,1,0),... นี่คือความท้าทายของรหัสกอล์ฟการส่งพร้อมซอร์สโค้ดที่มีความยาวสั้นที่สุดชนะ อย่าปล่อยให้คำตอบสั้น ๆ ในภาษากอล์ฟกีดกันคุณจากการโพสต์คำตอบในภาษาอื่น ลองคิดหาคำตอบที่สั้นที่สุดในทุกภาษา นี่เป็นความท้าทายที่ จำกัด อย่างซับซ้อน อาร์เรย์ใหม่ทุกตัวควรถูกส่งออกด้วยการผ่านเวลาO (k)นับตั้งแต่อาร์เรย์เอาท์พุทก่อนหน้า (หรือจุดเริ่มต้นของโปรแกรมสำหรับอาร์เรย์แรกที่เอาต์พุต) ซึ่งหมายความว่าเวลาการทำงานต่ออาร์เรย์ส่งออกใหม่ (พวกเขาจะมีความยาวแต่ละk ) ที่ควรจะเป็นมากขึ้นกว่าไม่มีO (k) นั่นคือมันควรจะใช้สัดส่วนของเวลาที่จะkและไม่ได้ตัวอย่างเช่นk 2หรือ2 k หมายเหตุนี่ไม่ใช่เวลาเฉลี่ยต่อเอาต์พุต แต่เวลาที่เลวร้ายที่สุดสำหรับแต่ละอาร์เรย์ที่เอาต์พุต คุณสามารถสันนิษฐานได้ว่าการคำนวณทางคณิตศาสตร์ทั้งหมดในจำนวนเต็ม 64 บิตสามารถดำเนินการได้ในเวลาคงที่เช่นเดียวกับการอ่านและส่งออกรวมถึงการมอบหมายและค้นหาและการเปลี่ยนแปลงค่าในอาร์เรย์ …

11
แก้ปัญหาเลขานุการ
เลขานุการปัญหาเป็นปัญหาที่มีชื่อเสียงอธิบายเป็นดังนี้: คุณต้องการเลขาคนใหม่ คุณมีผู้สมัคร N คนที่สามารถสัมภาษณ์ครั้งละหนึ่งคน คุณสามารถให้คะแนนผู้สมัครแต่ละคนหลังการสัมภาษณ์ ระบบการให้คะแนนของคุณจะไม่ให้คะแนนเดียวกันกับผู้สมัครสองคน หลังจากที่คุณสัมภาษณ์ผู้สมัครคุณต้องให้ "ใช่" หรือ "ไม่" ทันที คุณต้องการผู้สมัครที่มีคะแนนสูงสุด วิธีการแก้ปัญหาคือการสัมภาษณ์floor(N/e)ผู้สมัครคนแรกและยอมรับผู้สมัครคนแรกที่มีคะแนนสูงกว่าผู้สมัครคนก่อนหน้าทั้งหมด หากไม่มีผู้สมัครคนใดสูงกว่าให้ส่งคืนผู้สมัครคนสุดท้าย ที่น่าสนใจคือสิ่งนี้ให้1/eเปอร์เซ็นต์ ผู้สมัครสูงสุด eหมายถึงจำนวนออยเลอร์ ในการรับค่าของeคุณสามารถใช้ builtin logหรือ hardcode ให้เป็นทศนิยมอย่างน้อย 5 ตำแหน่ง การป้อนข้อมูล: 2^31-1อาร์เรย์ที่ไม่ว่างเปล่าของจำนวนเต็มไม่ใช่เชิงลบที่ไม่ซ้ำกันไม่เกิน เอาท์พุท: จำนวนเต็มที่แสดงถึงตัวเลือกที่ถูกเลือก เพื่อให้ชัดเจนอัลกอริทึมคือ: ค้นหาองค์ประกอบสูงสุดในfloor(N/e)องค์ประกอบแรกของอาร์เรย์ วนซ้ำองค์ประกอบที่เหลือและส่งกลับองค์ประกอบแรกที่สูงกว่าค่าสูงสุดที่พบในขั้นตอนที่ 1 หากไม่มีองค์ประกอบใดสูงกว่าให้ส่งคืนองค์ประกอบสุดท้าย ตัวอย่างเช่นสมมติว่าอาร์เรย์ของคุณ[2,7,4,3,9,20]เพื่อให้และN = 6 floor(N/e) = 22 [2,7]องค์ประกอบแรกของอาร์เรย์คือ สูงสุดของการมี[2,7] องค์ประกอบที่เหลือเป็น7 [4,3,9,20]องค์ประกอบแรกที่มากกว่า7คือเพื่อให้เรากลับมา99 กรณีทดสอบ: [0] => 0 [100] => …

15
เลือกไม้ที่ยาวที่สุด
คุณเป็นนักเขียนโปรแกรมอายุน้อยที่อาศัยอยู่กับเพื่อนสนิทอีก 2 คน คุณต้องทำทุกอย่างที่ต้องทำในบ้านทุกสัปดาห์และคุณตัดสินใจว่าใครเป็นคนเลือกโดยใช้ไม้เท้า คนที่เลือกไม้ที่สั้นที่สุดจะสูญเสียและทำหน้าที่เหลือเกิน เนื่องจากคุณเป็นโปรแกรมเมอร์และรักการสร้างปริศนาคุณจึงได้ปรับเปลี่ยน "เลือกแท่งที่สั้นที่สุด" ให้เป็นตัวต่อคอมพิวเตอร์ นี่คือกฎของปริศนา คุณจะได้รับเมทริกซ์ 2D โดยที่แต่ละคอลัมน์แสดงถึงแท่ง ในแต่ละคอลัมน์ 1 หมายถึงส่วนหนึ่งของไม้และ 0 เป็นพื้นที่ว่าง เมื่อไปจากบนลงล่างในแต่ละคอลัมน์เริ่มแรกคุณมี0และทันทีที่คุณกดปุ่ม1เริ่มและส่วนที่เหลือของคอลัมน์จะเต็มไปด้วย1เพียง คุณสามารถเขียนโปรแกรมของคุณเพื่อเลือกหนึ่งคอลัมน์ ขนาดของไม้เท้าในคอลัมน์นั้นจะเป็นตัวกำหนดผู้ชนะ / ผู้แพ้ ขนาดของแท่ง == จำนวน 1s ในคอลัมน์นั้น อย่างไรก็ตามโปรแกรมนั้นสามารถมีความซับซ้อนของเวลาเชิงเส้นตรงที่เลวร้ายที่สุดเท่านั้น ในฐานะที่คุณทุกคนเป็นโปรแกรมเมอร์คุณจะรู้ว่าโปรแกรมของคนอื่นกำลังถ่ายภาพเวลาที่จำกัดความซับซ้อน งานของคุณคือ: เขียนโปรแกรมหรือฟังก์ชั่นที่รับอินพุตในรูปแบบ 2D หรืออาร์เรย์ของสตริง อินพุตสามารถนำมาจาก STDIN / prompt / console หรืออาร์กิวเมนต์ของฟังก์ชัน หากคุณกำลังอ่านอินพุตจาก STDIN / พรอมต์คุณสามารถสันนิษฐานได้ว่าการอ่านอินพุตและการแปลงเป็นอาเรย์นั้นใช้เวลา 0 (แม้ว่ารหัสจะต้องมีในคำตอบของคุณ) กำหนดคอลัมน์ด้วยแท่งที่ยาวที่สุดในนั้น เอาต์พุตสามารถเป็นค่าส่งคืนของฟังก์ชันหรือไปยัง STDOUT / …

15
Binning ในเวลา
ภารกิจในการท้าทายนี้คือการใส่องค์ประกอบของอาร์เรย์ลงในถังขยะเวลา อินพุตจะเป็นอาร์เรย์จำนวนเต็มบวกที่ไม่ลดลงซึ่งแสดงเวลาของเหตุการณ์และจำนวนเต็มซึ่งแทนขนาดของแต่ละ bin ให้เราเริ่มด้วยตัวอย่าง เราเรียกอาร์เรย์อินพุทและเอาท์พุทอาร์เรย์AO `A = [1,1,1,2,7,10]` and `bin_size = 2`. `O = [4,0,0,1,1]`. ทำไม ? ด้วยbin_size = 2เราจะมีช่วงเวลาต่อไปนี้: (0,2], (2,4], (4,6], (6,8], (8,10]ที่สี่รายการ(1,1,1,2)อยู่ในช่วงแรก(0,2]ไม่มีใครในช่วงที่สองและสามซึ่งเป็นหนึ่ง7ในช่วงเวลา(6,8]และเป็นหนึ่งในช่วงเวลา10(8,10] รหัสของคุณควรพิจารณาทุกช่วงเวลาที่มีความยาวbin_sizeเริ่มต้น0และนับจำนวนที่Aมีในแต่ละตัว คุณควรมีปลายด้านขวามือของช่วงเวลาในถังเพื่อให้ในตัวอย่างข้างต้นจะถูกรวมอยู่ในจำนวนของ2 4รหัสของคุณควรทำงานในเวลาเชิงเส้นในผลรวมของความยาวของอินพุตและเอาต์พุต ตัวอย่างเพิ่มเติม: `A = [1,2,7,12,15]` and `bin_size = 5`. `O = [2, 1, 2]`. `A = [1,2,7,12,15]` and `bin_size = 3`. `O = …

14
ใส่อาร์เรย์ลงในถังขยะ
ในการท้าทายแบบนี้คุณจะได้รับการป้อนข้อมูลอาร์เรย์Lของจำนวนเต็มไม่เป็นลบและจำนวนของถังขยะbมากกว่า 0 Lแต่ไม่เกินความยาวของ รหัสของคุณจะต้องส่งคืนอาเรย์ใหม่Mที่มีความยาวbและอาเรย์Lนั้นได้ถูกรวมเข้าด้วยกัน นี่คือตัวอย่างที่อธิบายได้ง่ายที่สุด L = [1,0,5,1]และผลตอบแทนb = 2M = [1,6] L = [0,3,7,2,5,1]และผลตอบแทนb = 3M = [3,9,6] จนถึงตอนนี้ง่ายมาก อย่างไรก็ตามในคำถามนี้ไม่จำเป็นต้องมีการแบ่งb len(L)ในกรณีนี้ถังขยะสุดท้ายจะมีตัวเลขน้อยกว่าในการสร้าง แต่ละ bin ยกเว้นอาจเป็นอันสุดท้ายต้องมีจำนวนตัวเลขเท่ากันซึ่งมีผลต่อจำนวนทั้งหมด ถังขยะสุดท้ายจะต้องไม่มีตัวเลขที่มีส่วนร่วมมากกว่าถังขยะอื่น ถังขยะสุดท้ายจะต้องมีตัวเลขจำนวนมากที่มีส่วนร่วมให้มากที่สุดภายใต้กฎอื่น ๆ L = [0,3,7,2,5,1]และผลตอบแทน b = 4 ไม่ได้มีการส่งออกได้รับการยอมรับว่าเป็นถังที่สามไม่ได้มีจำนวนชื่อของตัวเลขที่เอื้อต่อการเป็นถังขยะและM = [3,9,6,0]M = [10,8,0,0]12 L = [0,3,7,2,5]และผลตอบแทน b = 2 ไม่ได้มีการส่งออกได้รับการยอมรับว่าเป็นถังที่ผ่านมาจะมีองค์ประกอบที่เอื้อต่อการได้ แต่ครั้งแรกที่มีเพียงM = [10,7]M = …

23
ตัวเลขรูปหลายเหลี่ยม
จำนวนเหลี่ยมเป็นจำนวนจุดในส่วนk-gon nขนาด คุณจะได้รับnและkและงานของคุณคือการเขียนโปรแกรม / ฟังก์ชั่นที่ส่งออก / พิมพ์หมายเลขที่สอดคล้องกัน เกณฑ์การให้คะแนน นี่คือรหัสกอล์ฟ ทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ ตัวอย่าง 3จำนวน RD หกเหลี่ยม ( k=6, n=3) เป็น28เพราะมี28จุดที่อยู่บน Testcases สามารถสร้างขึ้นจากชุดทดสอบ Pyth นี้ การใช้งาน: สองบรรทัดต่อ testcase nข้างบนkด้านล่าง n k output 10 3 55 10 5 145 100 3 5050 1000 24 10990000 ข้อมูลเพิ่มเติม ใน Wikipedia: https://en.wikipedia.org/wiki/Polygonal_number ใน Wolfram Mathworld: http://mathworld.wolfram.com/PolygonalNumber.html ใน …

2
ตัวเก็บประจุคู่
ตัวเก็บประจุมีชื่อเสียงในการผลิตด้วยความทนทานสูง ซึ่งเป็นที่ยอมรับได้ในหลายกรณี แต่บางครั้งจำเป็นต้องใช้ความจุที่มีค่าความคลาดเคลื่อน จำกัด กลยุทธ์ทั่วไปในการรับกำลังการผลิตด้วยมูลค่าที่แน่นอนที่คุณต้องการคือการใช้ตัวเก็บประจุที่วัดอย่างรอบคอบสองชุดพร้อมกันเพื่อให้ความจุเพิ่มขึ้นกับบางสิ่งในช่วงที่คุณต้องการ เป้าหมายในการท้าทายนี้คือกำหนดความจุ (หลายชุด) เพื่อจับคู่ตัวเก็บประจุเพื่อให้ความจุรวมของแต่ละคู่อยู่ในช่วงที่กำหนด คุณต้องค้นหาชุดการจับคู่ที่ดีที่สุดนั่นคือชุดการจับคู่ที่พบมากที่สุดเท่าที่จะเป็นไปได้ ข้อ จำกัด อินพุตประกอบด้วยรูปแบบของตัวเลือก รายการความจุที่ไม่มีการเรียงลำดับซึ่งเป็นตัวแทนของชุดตัวเก็บประจุ (หลาย) ที่คุณมี คู่ของความจุที่แสดงขอบเขตล่างและบนของช่วงเป้าหมาย (รวม) ความจุทั้งหมดในอินพุตเป็นจำนวนเต็มบวกที่น้อยกว่า 2 30หน่วยคือ pF (ไม่ใช่แบบนั้นสำคัญ) นอกเหนือจากรายการความจุในอินพุตชุดตัวเก็บประจุที่คุณยังมีจำนวนของตัวเก็บประจุที่ไม่มีที่สิ้นสุดที่มีค่า 0 pF เอาต์พุตประกอบด้วยรูปแบบของตัวเลือกรายการคู่ของความจุซึ่งผลรวมของแต่ละคู่อยู่ในช่วงเป้าหมายที่ระบุ ไม่ได้ระบุลำดับของคู่หรือลำดับความจุภายในคู่ ความจุในการส่งออกไม่อาจปรากฏบ่อยขึ้นกว่าที่ปรากฏอยู่ในชุดของตัวเก็บประจุที่คุณมี กล่าวอีกนัยหนึ่ง: คู่ที่คุณส่งออกจะต้องไม่ทับซ้อนกัน จะต้องไม่มีเงื่อนไขที่เป็นไปได้สำหรับผลลัพธ์ที่เป็นไปได้ 4 และ 5 ที่มีความจุมากกว่าคู่ที่เอาต์พุตของโปรแกรมของคุณสร้างขึ้น โปรแกรมของคุณจะยุติในเวลา O ( n !) โดยที่nคือความยาวของรายการที่แสดงถึงชุดของตัวเก็บประจุที่คุณมี ช่องโหว่จะไม่ถูกทารุณกรรม ช่วงเป้าหมายจะต้องไม่ว่างเปล่า เกณฑ์การให้คะแนน คะแนนของคุณคือความยาวของการแก้ปัญหาของคุณใน octets หากวิธีการแก้ปัญหาของคุณจัดการเพื่อแก้ปัญหานี้ในเวลาพหุนาม O ( n …

3
หนังสือบนหิ้ง
ฉันมีหนังสือและชั้นวางหนังสือ ฉันต้องการวางหนังสือให้มากที่สุดเท่าที่จะทำได้ แต่ฉันมีกฎ ทุกมิติของหนังสือ (ความสูงความกว้างและความลึก) ควรเป็นลำดับที่ไม่เพิ่มขึ้นบนชั้นวาง ซึ่งหมายความว่าหนังสือทุกเล่มจะต้องสูงอย่างน้อยที่สุดเท่าที่จะเป็นไปได้ เช่นเดียวกันกับความกว้างและความลึก คุณไม่สามารถหมุนหนังสือเพื่อสลับความสูงความกว้างและความลึกของหนังสือได้ คุณควรเขียนโปรแกรมหรือฟังก์ชั่นที่กำหนดขนาดของหนังสือทั้งหมดเป็นเอาท์พุทอินพุตหรือส่งกลับจำนวนสูงสุดของหนังสือที่ฉันสามารถวางบนชั้นวาง อินพุต รายการจำนวนเต็มสามเท่าของจำนวนเต็มบวกที่แต่ละ triplet กำหนดความสูงความกว้างและความลึกของหนังสือ จะมีอย่างน้อยหนึ่ง triplet ในรายการอินพุต หนังสือสองเล่มสามารถมีความยาวเท่ากันตามจำนวนมิติใด ๆ เอาท์พุต จำนวนเต็มบวกเดียวจำนวนสูงสุดของหนังสือที่พอดีกับชั้นวางที่เป็นไปตามกฎ ความซับซ้อนของเวลา อัลกอริทึมของคุณควรมีพหุนามความซับซ้อนเวลากรณีเลวร้ายที่สุดในจำนวนหนังสือ ซึ่งหมายความว่าตัวอย่างเช่นความซับซ้อนของเวลาต่อไปนี้เป็นสิ่งที่ถูกต้องทั้งหมด: O (N ^ 3), O (บันทึก (N) * N ^ 2), O (N) และสิ่งต่อไปนี้ไม่ถูกต้อง: O (2 ^ N), O (N!), O (N ^ N) ตัวอย่าง อินพุต …

1
บอทเมาใกล้สายตาที่อ่อนไหวบนทุ่นระเบิด
ตามที่ชื่ออาจแนะนำปัญหานี้ได้รับแรงบันดาลใจมาจากบอท Polite Near- Sighted Drunkโดย @NP บอทที่น่าสงสารของเรานั้นถูกวางไว้บนตะแกรงคาร์ทีเซียนที่จุดกำเนิดและหลังจากนั้นทุกนาทีมันจะเคลื่อนที่ 1 ยูนิตในหนึ่งในสี่ทิศทาง (ขึ้น, ลง, ซ้าย, ขวา) หลังจากnนาทีเหมืองที่ซ่อนอยู่ทั้งหมดในกริดจะเปิดใช้งานเพื่อฆ่าบอทที่น่าสงสารที่อาจพบตัวเองอยู่เหนือพวกมัน เหมืองจะอยู่ที่พิกัดจำนวนเต็มทั้งหมดซึ่งเป็นไปตามสมการ | y | = | x | ท้าทาย คุณจะได้รับnจำนวนนาทีก่อนที่เหมืองระเบิดเป็น input และเอาท์พุทคุณจะต้องพบกับความน่าจะเป็นที่บอทเป็นตาย การป้อนข้อมูล : มีจำนวนธรรมชาติที่เป็นตัวแทนของn เอาต์พุต : ให้ความน่าจะเป็นที่บอทนั้นตายแล้วคือp / q, โดยที่ p และ q เป็นจำนวนเต็มจำนวนเต็ม (q ไม่สามารถเป็น 0, แต่ p สามารถ) p. กฎระเบียบ อัลกอริทึมของคุณจะต้องไม่ทำงานในแบบเอ็กซ์โพเนนเชียล มันควรจะทำงานในเวลาพหุนามหรือน้อยกว่า อัลกอริทึมของคุณจะต้องสามารถจัดการอินพุตของn<20 …

8
วาดรูปสามเหลี่ยมพี
การชี้แจง: โดยทั่วไปคุณต้องทำสิ่งนี้ ฟังก์ชัน totient ของออยเลอร์มีชื่อ phi ลองคำนวณ phi (8) ก่อนอื่นให้ระบุหมายเลขทั้งหมด 8 และต่ำกว่าไม่รวม 0 หรือต่ำกว่า 8 7 6 5 4 3 2 1 ตอนนี้ค้นหาว่าตัวเลขใดไม่ใช้ตัวคูณกับ 8 (1 ไม่นับ) และวาง#ในตำแหน่งของพวกเขา 8 # 6 # 4 # 2 # ลบตัวเลข # # # # - ทีนี้ทำอย่างนี้ แต่เอาท์พุทสตริงเข้าด้วยกันในรูปสามเหลี่ยม 9 88 777 6666 55555 444444 3333333 …

23
ค้นหาตัวหารที่เป็นบวก!
คำนิยาม จำนวนเป็นบวกถ้ามันมากกว่าศูนย์ Number ( A) คือตัวหารของตัวเลขอื่น ( B) หากAสามารถหารBด้วยส่วนที่เหลือ ตัวอย่างเช่น2เป็นตัวหาร6เพราะ2สามารถหาร6ด้วยส่วนที่เหลือ เป้าหมาย งานของคุณคือการเขียนโปรแกรม / ฟังก์ชั่นที่ใช้จำนวนบวกแล้วค้นหาตัวหารทั้งหมด การ จำกัด คุณอาจจะไม่ได้ใช้ใด ๆ ในตัวที่เกี่ยวข้องกับนายกรัฐมนตรี หรือ ตัวประกอบ ความซับซ้อนของขั้นตอนวิธีการของคุณต้องไม่เกิน O (sqrt (n)) เสรีภาพ รายการผลลัพธ์อาจมีรายการที่ซ้ำกัน ไม่จำเป็นต้องเรียงรายการเอาท์พุท เกณฑ์การให้คะแนน นี่คือรหัสกอล์ฟ ทางออกที่สั้นที่สุดในหน่วยไบต์ชนะ Testcases input output 1 1 2 1,2 6 1,2,3,6 9 1,3,9

9
คำถามการเรียงลำดับคลาสสิกคำถามกอล์ฟ
นี่คือคำถามที่รหัสกอล์ฟ อินพุต รายการจำนวนเต็มที่ไม่เป็นลบในรูปแบบใดจะสะดวกที่สุด เอาท์พุต รายการเดียวกันเรียงตามลำดับในรูปแบบที่สะดวกที่สุด การ จำกัด รหัสของคุณจะต้องทำงานในเวลา O (n log n) ในกรณีที่เลวร้ายที่สุดซึ่งnเป็นจำนวนเต็มในอินพุต ซึ่งหมายความว่า quicksort แบบสุ่มหมดตัวอย่างเช่น อย่างไรก็ตามมีตัวเลือกอื่น ๆ ให้เลือกมากมาย อย่าใช้ไลบรารี / ฟังก์ชั่น / การเรียงลำดับที่คล้ายกัน อย่าใช้อะไรที่ทำให้การเรียงลำดับส่วนใหญ่เหมาะกับคุณเช่นห้องสมุดกอง โดยพื้นฐานไม่ว่าคุณจะใช้อะไรก็ตามจงนำไปใช้ตั้งแต่เริ่มต้น คุณสามารถกำหนดฟังก์ชั่นหากคุณต้องการ แต่โปรดแสดงตัวอย่างของมันในโปรแกรมเต็มรูปแบบที่ใช้งานได้จริง มันควรจะทำงานได้สำเร็จและรวดเร็วในทุกกรณีทดสอบด้านล่าง กรณีทดสอบ In: [9, 8, 3, 2, 4, 6, 5, 1, 7, 0] Out:[0, 1, 2, 3, 4, 5, 6, 7, 8, …

6
ค้นหาผลรวมของระยะทางที่ใกล้ที่สุด
สำหรับงานนี้รหัสของคุณควรใช้อาร์เรย์ที่มีการเรียงสองจำนวนเต็ม X และ Y เป็นอินพุต มันควรคำนวณผลรวมของระยะทางที่แน่นอนระหว่างแต่ละจำนวนเต็มใน X และจำนวนที่ใกล้เคียงที่สุดใน Y ตัวอย่าง: X = (1 5,9) Y = (3,4,7) ระยะทางคือ 2 + 1 + 2 X = (1,2,3) Y = (0,8) ระยะทางคือ 1 + 2 + 3 รหัสของคุณสามารถป้อนข้อมูลในวิธีที่สะดวก ข้อ จำกัด หลักคือรหัสของคุณจะต้องทำงานในเวลาเชิงเส้นในผลรวมของความยาวของสองอาร์เรย์ . (คุณสามารถสันนิษฐานได้ว่าการเพิ่มจำนวนเต็มสองจำนวนต้องใช้เวลาคงที่)

5
ผลรวม จำกัด แบบวงกลม
ท้าทาย ลองจินตนาการN-tuple ของจำนวนเต็มระหว่าง 0 และรวมและขอเรียกว่าMF มีความเป็น(M + 1) ** Nไปได้Fทั้งหมด จำนวนดังกล่าวFตอบสนองความไม่เท่าเทียมกันต่อไปนี้ทั้งหมด (ดัชนีเป็นฐานเดียว) F[n] + F[n+1] <= M สำหรับ 1 <= n < N F[N] + F[1] <= M เขียนโปรแกรมหรือฟังก์ชั่นที่ใช้เวลาสองจำนวนเต็มบวก NและMและผลคำตอบในรูปแบบที่สะดวกใด ๆ กรณีทดสอบ (N,M) => Answer (1,1) => 1 (2,1) => 3 (3,1) => 4 (4,1) => 7 (1,2) => 2 …

3
ค้นหา pangrams ที่สั้นที่สุดจากรายการคำ
แกรมคือสตริงที่มีทุกตัวอักษรa- zภาษาอังกฤษอักษรกรณีตาย (มันก็โอเคถ้า pangram มีมากกว่าหนึ่งสำเนาของตัวอักษรหรือถ้ามันมีตัวอักษรที่ไม่ใช่ตัวอักษรนอกเหนือจากตัวอักษร) เขียนโปรแกรมหรือฟังก์ชั่นซึ่งอินพุตเป็นรายการของสตริงและเอาต์พุตหนึ่งหรือมากกว่าหนึ่งสตริงที่มีคุณสมบัติดังต่อไปนี้: สตริงเอาต์พุตแต่ละรายการต้องเป็น pangram แต่ละสตริงเอาต์พุตต้องถูกจัดรูปแบบโดยการต่อหนึ่งสตริงขึ้นไปจากรายการอินพุตคั่นด้วยช่องว่าง แต่ละสตริงเอาต์พุตต้องสั้นที่สุดหรือผูกให้สั้นที่สุดในบรรดาสตริงทั้งหมดที่มีคุณสมบัติเหล่านี้ หลายโปรแกรมจะเลือกที่จะส่งออกเพียงหนึ่งสาย; คุณเพียงแค่ต้องการส่งออกมากกว่าหนึ่งสายถ้าคุณต้องเขียนโค้ดพิเศษเพื่อ จำกัด การส่งออก คุณอาจคิดว่าอินพุตไม่มีอักขระหรือช่องว่างที่ไม่สามารถพิมพ์ได้และไม่มีคำใดในนั้นเกินกว่า 26 เท่าของลอการิทึมธรรมชาติของความยาวของรายการ) อักขระ (อย่างไรก็ตามคุณไม่สามารถสันนิษฐานได้ว่าอินพุตนั้นไม่มีอะไรนอกจากตัวอักษรหรืออักษรตัวพิมพ์เล็กเท่านั้นเครื่องหมายวรรคตอนและตัวพิมพ์ใหญ่เป็นไปได้ทั้งหมด) อินพุตและเอาต์พุตสามารถกำหนดในรูปแบบที่เหมาะสม สำหรับการทดสอบโปรแกรมของคุณฉันขอแนะนำให้ใช้สองกรณีทดสอบ: พจนานุกรมคำศัพท์ภาษาอังกฤษ (คอมพิวเตอร์ส่วนใหญ่มีหนึ่งกรณี) และกรณีต่อไปนี้ (ซึ่ง pangram ที่สมบูรณ์แบบ (26 ตัวอักษร) เป็นไปไม่ได้ดังนั้นคุณจะต้องค้นหา มีตัวอักษรซ้ำซ้อน): abcdefghi defghijkl ijklmnop lmnopqrs opqrstuvw rstuvwxyz คุณควรรวมตัวอย่างผลลัพธ์ของโปรแกรมพร้อมกับการส่งของคุณ (สิ่งนี้อาจแตกต่างกันไปสำหรับคนอื่นเนื่องจากการใช้รายการคำที่แตกต่างกัน) เงื่อนไขชัยชนะ นี่เป็นความ ท้าทายที่ซับซ้อนของรหัส - กอล์ฟ ผู้ชนะคือโปรแกรมที่สั้นที่สุด (ไบต์) ที่วิ่งในเวลาพหุนาม (สรุปสำหรับผู้ที่ไม่ทราบความหมาย: ถ้าคุณเพิ่มขนาดของรายการคำสองเท่าโปรแกรมควรช้าลงโดยไม่เกินค่าคงที่อย่างไรก็ตามปัจจัยคงที่ในคำถามอาจมีขนาดใหญ่เท่ากับคุณ เช่น. …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.