Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++
C++
  1. Count smaller values whose XOR with x is greater than x in C++

    กำหนดจำนวนเต็ม x นับจำนวน y ที่ 0 < y < x และ x ตัวอย่าง: x = 11 (binary 1011) → Output: 4 (y = 4,5,6,7) หลักการ (Bitwise Analysis) x ก็ต่อเมื่อ bit แรกที่ต่างกัน (จาก MSB) ของ y เป็น 1 และของ x เป็น 0 → นับ bit 0 ใน x: สำหรับแต่ละ bit 0 ที่ตำแหน่ง i สามารถเลือก y ที่ bit i = 1 และ bit สูงกว่า =

  2. Maximum circular subarray sum in C++: หาผลรวม Subarray วงกลมสูงสุด

    กำหนด array หา subarray (อาจพุ่งข้ามปลาย array) ที่มีผลรวมสูงสุด ตัวอย่าง: {2, 5, -1, 6, 9, 4, -5} → Output: 25 (subarray: 4, 2, 5, -1, 6, 9) วิธีแก้ปัญหา (Kadanes Algorithm แบบ Circular) หา max subarray sum ปกติ (max_kadane) หา min subarray sum (min_kadane) ผลรวมทั้งหมด = total Circular

  3. Count rows/columns with sum equals to diagonal sum in C++

    กำหนด square matrix หาจำนวนแถวและคอลัมน์ที่ผลรวมเท่ากับ ผลรวม diagonal หลัก (principal) หรือ diagonal รอง (secondary) ตัวอย่าง: 4 1 7 10 3 5 2 2 11 Principal: 4+3+11=18, Secondary: 7+3+2=12 Row sums: 12, 18, 15 → match 2 rows Col sums: 16, 6, 23 → match 0 Output: 2 วิธีแก้ปัญหา คำนวณ principal

  4. Count number of occurrences in a sorted array in C++: นับความถี่ใน Array เรียงแล้ว

    กำหนด sorted array และตัวเลข num หาจำนวนครั้งที่ num ปรากฏใน array ตัวอย่าง: arr = {1,1,1,2,3,4}, num = 1 → Output: 3 วิธีแก้ปัญหา วิธีง่าย (O(n)) วนลูปนับโดยตรง วิธีมีประสิทธิภาพ (O(log n)) - Binary Search หา lower_bound (ตำแหน่งแรกที่ ≥ num) หา upper_bound num) ผลต่าง = จำนวนครั้ง ตัวอ

  5. Count number of sub-sequences with GCD 1 in C++: นับ subsequence ที่ GCD เท่ากับ 1

    กำหนด array ของจำนวนเต็ม หาจำนวน subsequence (ลำดับย่อย) ที่มี GCD (ตัวหารร่วมมาก) เท่ากับ 1 ตัวอย่าง: arr = {3, 4, 8, 16} → Output: 7 Subsequences: (3,4), (3,8), (3,16), (4,3), (8,3), (16,3), (3,4,8) หมายเหตุเกี่ยวกับโค้ดต้นฉบับ โค้ดตัวอย่างใช้ nested loop ตรวจสอบ GCD ของคู่ (i,j) ซึ่งนับเฉพาะ su

  6. Longest Interval Containing One Number in C++: หาช่วงใหญ่สุดที่มีตัวเลขจาก Array อย่างมาก 1 ตัว

    กำหนด array nums ของจำนวนเต็มที่ไม่ซ้ำกัน หาขนาดของช่วง [start, end] ใหญ่สุด (inclusive) ที่มีตัวเลขจาก nums อยู่ในช่วง สูงสุด 1 ตัว ตัวอย่าง: nums = [10, 6, 20] → Output: 99990 ช่วงใหญ่สุดคือ [11, 100000] มีแค่ 20 อยู่ในช่วง (สมมติขอบเขตบนคือ 100000) วิธีแก้ปัญหา เรียง nums พิจารณาช่วงระหว่า

  7. Making List Values Equal in C++: หา Operations น้อยที่สุดเพื่อทำให้ค่าทั้งหมดเท่ากัน

    กำหนด array nums Operation หนึ่งครั้ง = เลือก subset ใดก็ได้ แล้ว +1 ทุกตัวใน subset หาจำนวน operation น้อยที่สุดเพื่อทำให้ค่าทุกตัวเท่ากัน ตัวอย่าง: [1,3,5] → Output: 4 คำอธิบาย: ต้องเพิ่มค่า 1 ให้เป็น 5 (4 ครั้ง), 3 ให้เป็น 5 (2 ครั้ง) แต่ทำพร้อมกันได้ → ต้องใช้ max - min = 4 ครั้ง ข้อสังเกตสำคั

  8. Contained Interval in C++: ตรวจสอบว่ามี Interval ที่ครอบคลุมอีก Interval หนึ่งหรือไม่

    กำหนดรายการ intervals [start, end] ตรวจสอบว่ามี interval ไหนที่ ครอบคลุม interval อีกตัวหนึ่ง (คือ start ≤ other.start และ end ≥ other.end) ตัวอย่าง: [[2,4],[5,11],[5,9],[10,10]] → true ([5,11] ครอบคลุม [5,9]) วิธีแก้ปัญหา เรียง intervals โดย end ขึ้น, ถ้า end เท่ากัน เรียง start ลง วนลูปเก็บ

  9. Split List in C++: ตรวจสอบว่าแบ่ง Array ได้ 2 ส่วนที่ทุกค่าด้านซ้าย < ด้านขวา

    กำหนด array nums ต้องตรวจสอบว่าแบ่งเป็น 2 ส่วน (ทั้งคู่ไม่ว่าง) ได้หรือไม่ ที่ทุกค่าในส่วนซ้าย น้อยกว่า ทุกค่าในส่วนขวา ตัวอย่าง: [6,4,3,8,10] → true (ซ้าย: [6,4,3], ขวา: [8,10]) วิธีแก้ปัญหา (Prefix Max / Suffix Min) สร้าง left[i] = max ของ nums[0..i] สร้าง right[i] = min ของ nums[i..n-1]

  10. Flip to Zeros in C++: หาจำนวน Operation น้อยที่สุดเพื่อทำให้ Array เป็น 0 ทั้งหมด

    กำหนด array nums ที่มีแค่ 0 และ 1 Operation หนึ่งครั้งคือเลือก index i แล้ว flip (0↔1) ทุกตัวตั้งแต่ i ถึงปลาย array หาจำนวน operation น้อยที่สุดเพื่อทำให้ทุกตัวเป็น 0 ตัวอย่าง: [1,0,1] → Output: 3 ขั้นตอน: flip index 0 → [0,1,0], flip index 1 → [0,0,1], flip index 2 → [0,0,0] วิธีแก้ปัญหา (Prefix

  11. Furthest From Origin in C++: ระยะห่างสูงสุดจากจุดกำเนิดด้วยการแทนที่ ?

    กำหนด string s ประกอบด้วย L (ซ้าย), R (ขวา), ? (ซ้ายหรือขวา) เริ่มจากตำแหน่ง 0 หาระยะห่างสูงสุดจากจุดกำเนิดที่เป็นไปได้โดยแทนที่ ? ด้วย L หรือ R ตัวอย่าง: LLRRL?? → Output: 3 คำอธิบาย: นับ L=3, R=2, ?=2 → max(3,2) - min(3,2) + 2 = 3 - 2 + 2 = 3 วิธีแก้ปัญหา นับจำนวน L, R, ? ระยะห่างสูงสุด = |

  12. Flipped Matrix Prequel in C++: หาจำนวน 1 สูงสุดหลัง Flip Row และ Column

    กำหนด binary matrix ต้องหาจำนวน 1 สูงสุดที่ได้หากทำการ flip (0↔1) แถวหนึ่งและคอลัมน์หนึ่ง (flip ทั้งคู่) ตัวอย่าง: 1 0 1 0 1 0 1 0 0 → Output: 8 วิธีแก้ปัญหา นับจำนวน 1 ในแต่ละแถว (row[i]) และแต่ละคอลัมน์ (col[j]) รวมทั้งหมด (total) ลอง flip ที่แต่ละตำแหน่ง (i,j) คำนวณจำนวน 1 ใหม่: cand = t

  13. Palindrome Integer in C++: ตรวจสอบเลข Palindrome โดยไม่ใช้ String

    กำหนดจำนวนเต็มบวก num ตรวจสอบว่าเป็น Palindrome (อ่านจากซ้าย-ขวา และขวา-ซ้าย ได้เหมือนกัน) โดยห้ามแปลงเป็น String ตัวอย่าง: 1331 → true วิธีแก้ปัญหา เก็บค่าเดิมไว้ใน x สร้างตัวเลขย้อนกลับ ret โดยวนลูปดึงหลักสุดท้าย (num % 10) และสร้าง ret = ret * 10 + d ลด num /= 10 จนหมด เปรียบเทียบ x ==

  14. Coincidence Search in C++: นับจำนวนที่หาได้ด้วย Binary Search บน Array ไม่ได้เรียง

    กำหนด array nums ที่มีค่าไม่ซ้ำกัน ต้องนับว่ามีจำนวนกี่ตัวที่ หาได้ หากใช้ Binary Search มาตรฐานบน array นี้ (โดยที่ array ไม่ได้เรียงลำดับ) ตัวอย่าง: [2,6,4,3,10] → Output: 3 คำอธิบาย: Binary Search หา 4 เจอทันที (mid = index 2), หา 2 และ 10 เจอหลัง 2 รอบ วิธีแก้ปัญหา สำหรับแต่ละค่าใน array ให

  15. Large to Small Sort in C++: เรียงสลับระหว่างค่ามากและน้อย

    กำหนด array ของจำนวนเต็ม ต้องเรียงลำดับแบบสลับกันระหว่างค่ามากและน้อย: ตัวแรก = ค่าสูงสุด ตัวที่สอง = ค่าต่ำสุด ตัวที่สาม = ค่าสูงสุดอันดับ 2 ตัวที่สี่ = ค่าต่ำสุดอันดับ 2 ... และทำต่อไป ตัวอย่าง: [6,3,10,4] → [10, 3, 6, 4] วิธีแก้ปัญหา เรียง array จากน้อยไปมาก ใช้ two pointers: i

  16. Beer Bottles in C++: คำนวณขวดเบียร์ที่ดื่มได้จากการแลกขวดเปล่า

    มีขวดเบียร์เต็ม n ขวด สามารถแลกขวดเปล่า 3 ขวด ได้ 1 ขวดเต็ม หาจำนวนขวดทั้งหมดที่ดื่มได้ ตัวอย่าง: n = 10 → Output: 14 คำนวณ: ดื่ม 10 ขวด → เปล่า 10 ขวด → แลก 3 ขวด ได้ 3 ขวดเต็ม (เหลือเปล่า 1) → ดื่ม 3 → เปล่ารวม 4 → แลก 3 ได้ 1 (เหลือ 1) → ดื่ม 1 → เปล่ารวม 2 (ไม่พอแลก) → รวมดื่ม 10+3+1=14 วิธีแก

  17. Most Frequent Number in Intervals in C++: หาตัวเลขที่อยู่ในช่วงมากที่สุด

    กำหนดรายการช่วง intervals โดยแต่ละช่วงเป็น [start, end] ต้องหาตัวเลขที่ปรากฏในช่วงมากที่สุด (นับรวมปลายช่วง) หากมีค่าเท่ากันให้คืนค่าที่น้อยที่สุด ตัวอย่าง: [[2,5],[4,6],[7,10],[8,10]] → Output: 4 (ตัวเลข 4 อยู่ในช่วง [2,5] และ [4,6] รวม 2 ช่วง) วิธีแก้ปัญหา (Sweep Line / Difference Array) ใช้

  18. Revolving Door in C++: จำลองการเดินทางผ่านประตูหมุน

    มีรายการคำขอ requests โดยแต่ละคำขอเป็น [t, d] หมายถึงเวลา t มีคนมาถึงประตู และต้องการเข้า (d=1) หรือออก (d=0) มีเพียงประตูเดียว ใช้เวลา 1 หน่วยเวลาต่อคน มีกฎดังนี้: ประตูเริ่มต้นที่สถานะ เข้า (in) ถ้ามีคนเพียงคนเดียวที่เวลา t คนนั้นใช้ประตูได้ทันที ถ้ามีหลายคนต้องการเข้า คนที่มาก่อนใช้ก่อน แล

  19. Unique Fractions in C++: ลดรูปเศษส่วน ลบซ้ำ เรียงลำดับ

    กำหนดให้มีรายการเศษส่วน โดยแต่ละเศษส่วนมีรูปแบบ [numerator, denominator] เราต้องสร้างรายการใหม่ที่: เศษส่วนอยู่ในรูปลดรูปแล้ว (เช่น 20/14 → 10/7) ลบเศษส่วนซ้ำออก (หลังลดรูปแล้ว) เรียงลำดับจากน้อยไปมากตามค่าจริงของเศษส่วน เครื่องหมายลบอยู่ที่ตัวเศษเสมอ ตัวอย่าง: {{16,8},{4,2},{7,3},{14,6},

  20. TV Shows in C++: หาผลรวมระยะเวลาของรายการ TV ที่ดูมากที่สุด k อันดับแรก

    กำหนดให้มีรายชื่อรายการ TV shows และระยะเวลาที่ดูแต่ละรายการ พร้อมกับจำนวนเต็ม k โดย shows[i] และ duration[i] แสดงชื่อและระยะเวลาที่บุคคลที่ i ดู เราต้องหาผลรวมระยะเวลาของ k รายการที่มีระยะเวลาสะสมมากที่สุด ตัวอย่าง: shows = [Castle Play, Fairy Tale Series, Castle Play, Jerry Mouse, Rich Boy], dura

Total 6007 -คอมพิวเตอร์  FirstPage PreviousPage NextPage LastPage CurrentPage:216/301  20-คอมพิวเตอร์/Page Goto:1 210 211 212 213 214 215 216 217 218 219 220 221 222