โจทย์
คำนวณค่าเฉลี่ยของลิสต์ จากนั้นเก็บเฉพาะค่าที่มากกว่าค่าเฉลี่ย (ต้องมากกว่าเท่านั้น) โดยเรียงลำดับเดิม
ให้เขียนฟังก์ชัน above_average(numbers)
อินพุต
numbers: ลิสต์ของจำนวนเต็ม
เอาต์พุต
คืนค่าลิสต์ของค่าที่มากกว่าค่าเฉลี่ย (ถ้าอินพุตว่าง ให้คืนลิสต์ว่าง)
เงื่อนไข
0 ≤ ความยาว ≤ 10,000; -1,000,000 ≤ แต่ละค่า ≤ 1,000,000
ตัวอย่าง
อินพุต:
numbers = [1, 2, 3, 4, 10]
ผลลัพธ์ที่คาดหวัง:
expected = [10]
อินพุต:
std::vector<long long> numbers = {1, 2, 3, 4, 10};
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {10};
อินพุต:
long[] numbers = new long[] {1, 2, 3, 4, 10};
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {10};
คำอธิบาย
ค่าเฉลี่ยคือ 20 / 5 = 4; มีแค่ 10 ที่มากกว่า 4
อินพุต:
numbers = [5, 5, 5]
ผลลัพธ์ที่คาดหวัง:
expected = []
อินพุต:
std::vector<long long> numbers = {5, 5, 5};
ผลลัพธ์ที่คาดหวัง:
std::vector<long long> expected = {};
อินพุต:
long[] numbers = new long[] {5, 5, 5};
ผลลัพธ์ที่คาดหวัง:
long[] expected = new long[] {};
คำอธิบาย
ทุกค่ามีค่าเท่ากับค่าเฉลี่ย 5 ดังนั้นไม่มีค่าที่มากกว่า: [].
แนวทางการแก้
ลองทำเองก่อน แล้วค่อยเปิดคำใบ้ทีละข้อ
คำใบ้ 1
หาค่าเฉลี่ยของรายการก่อน แล้วคัดเฉพาะค่าที่มากกว่านั้นแบบ strictly above
คำใบ้ 2
โดยทั่วไปต้องใช้หนึ่งรอบเพื่อหาผลรวม และอีกรอบเพื่อเก็บค่าที่ตรงเงื่อนไข
คำใบ้ 3
ถ้ารายการว่าง คำตอบก็ควรเป็นว่างเช่นกัน
ความซับซ้อนที่คาดหวัง
เวลา O(n), หน่วยความจำเพิ่ม O(1)
แหล่งอ้างอิง
โจทย์นี้ปรับให้เหมาะกับ CodeUtility กรุณาทำตามคำชี้แจงและข้อจำกัดด้านบน