สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums ซึ่งมีความยาวเป็น n องค์ประกอบที่มีอยู่ในรายการนี้แสดงถึงคะแนนปัจจุบันของนักว่ายน้ำในการแข่งขัน สำหรับการแข่งขันรอบสุดท้าย ผู้ชนะอันดับหนึ่งสำหรับรอบปัจจุบันนี้ จะได้รับ n คะแนน ผู้ชนะอันดับที่สองจะได้รับ n-1 คะแนน เป็นต้น เราต้องตรวจสอบจำนวนนักว่ายน้ำที่ยังสามารถชนะการแข่งขันในรอบสุดท้ายหลังรอบปัจจุบัน หากคะแนนเท่ากันจะถือว่าชนะ
ดังนั้น หากอินพุตเป็น nums =[9, 6, 11, 12] ผลลัพธ์จะเป็น 3 เนื่องจากนักว่ายน้ำที่อยู่ในคะแนน 9, 11 และ 12 ในตอนนี้ พวกเขาทั้งหมดสามารถชนะได้หากคะแนนสุดท้ายคือ [13 , 9, 13, 13]. กล่าวคือ นักว่ายน้ำที่ได้คะแนน 9 ได้อันดับหนึ่ง ได้เพิ่ม 4 แต้ม นักว่ายน้ำ 6 แต้ม ได้อันดับสอง ตอนนี้ได้ 9 แต้ม นักว่ายน้ำ 11 แต้มได้สาม คะแนนใหม่คือ 13 และนักว่ายน้ำได้ 12 แต้ม ที่สุดท้ายคะแนนคือ 12 ด้วย แต่ถึงแม้นักว่ายน้ำ 6 แต้มจะได้อันดับหนึ่ง คะแนนสุดท้ายของเขาก็จะเป็น 10 แต้ม นักว่ายน้ำ 9 แต้มจะได้อันดับสอง จากนั้นคะแนนของเขาจะเป็น 12 ไปเรื่อยๆ ก็ไม่มีโอกาสชนะนักว่ายน้ำคนที่สองเช่นกัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า nums ว่างเปล่าก็
- คืน 0
- n :=ขนาดของ nums
- ตอบ :=0
- เรียงเลขรายการ
- a :=0
- สำหรับฉันในช่วง n - 1 ถึง 0, ลดลง 1 ทำ
- cand :=nums[i] + n - i
- ถ้าแคน> a แล้ว
- a :=แคนดี้
- สำหรับแต่ละ x เป็น nums ทำ
- ถ้า x + n>=a แล้ว
- อัน :=ans + 1
- ถ้า x + n>=a แล้ว
- คืนสินค้า
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
def solve(nums): if not nums: return 0 n = len(nums) ans = 0 nums.sort() a = 0 for i in range(n - 1, -1, -1): cand = nums[i] + n - i if cand > a: a = cand for x in nums: if x + n >= a: ans += 1 return ans nums = [9, 6, 11, 12] print(solve(nums))
อินพุต
[9, 6, 11, 12]
ผลลัพธ์
3