Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

โปรแกรม C# หาความยาวของ 1 ติดกันมากที่สุดในการแสดงผลไบนารีของจำนวนเต็ม

ใช้เทคนิค Bitwise: n = n & (n << 1) ทำซ้ำจนกว่า n จะเป็น 0 จำนวนรอบที่ทำได้คือความยาวของ 1 ติดกันมากที่สุด

หลักการ

  • n << 1 ขยับบิตซ้าย 1 ตำแหน่ง
  • n & (n << 1) เก็บเฉพาะบิตที่เป็น 1 ติดกัน (Consecutive 1s)
  • แต่ละรอบจะลดความยาวของ 1 ติดกันที่ยาวที่สุดลง 1

ตัวอย่าง: 150 (Binary: 10010110) มี 1 ติดกันสูงสุด 2 ตัว

using System;

class Demo
{
    private static int FindConsecutive(int i)
    {
        int count = 0;
        while (i != 0)
        {
            i = (i & (i << 1));
            count++;
        }
        return count;
    }

    public static void Main()
    {
        Console.WriteLine(FindConsecutive(150)); // 2
    }
}

ผลลัพธ์

2

ประสิทธิภาพ: O(k) โดย k = ความยาว 1 ติดกันมากที่สุด (เร็วมาก)