287.find-the-duplicate-number.go 290 B

12345678910111213141516171819
  1. func findDuplicate(nums []int) int { // Binary search
  2. n := len(nums)
  3. beg, end := 1, n
  4. for beg < end {
  5. mid := (beg + end) / 2
  6. cnt := 0
  7. for i := 0; i < n; i++ {
  8. if nums[i] <= mid {
  9. cnt++
  10. }
  11. }
  12. if cnt <= mid {
  13. beg = mid + 1
  14. } else {
  15. end = mid
  16. }
  17. }
  18. return beg
  19. }