287. 寻找重复数

图片.png

二分查找

  1. package main
  2. import (
  3. "fmt"
  4. "sort"
  5. )
  6. func findDuplicate1(nums []int) int {
  7. flag :=make([]int,len(nums))
  8. for i:=0;i<len(nums);i++{
  9. if flag[nums[i]]==1{
  10. return nums[i]
  11. }
  12. flag[nums[i]]=1
  13. }
  14. return -1
  15. }
  16. func findDuplicate2(nums []int) int {
  17. sort.Ints(nums)
  18. l :=0
  19. r :=len(nums)
  20. for l<r{
  21. mid := l+(r-l)>>1
  22. if nums[mid]>mid{
  23. l =mid+1
  24. }else {
  25. r =mid
  26. }
  27. }
  28. return l
  29. }
  30. func findDuplicate(nums []int) int {
  31. sort.Ints(nums)
  32. for i := 0; i < len(nums); i++ {
  33. if nums[i] == nums[i+1] {
  34. return nums[i]
  35. }
  36. }
  37. return 0
  38. }
  39. func main() {
  40. //1 2,2,3,4
  41. fmt.Println(findDuplicate([]int{1,3,4,2,2}))
  42. fmt.Println(findDuplicate([]int{3,1,3,4,2}))
  43. }