返回轨道
算法 · 2026-05-14 · 15 阅读

P56 有序数组中的单身数字

算法 15 阅读

信号摘要

难度:Medium · 时长:05:03 · leetcode 540 · lintcode 1183

P56 有序数组中的单身数字

未对外公开播放权限
点击查看说明

描述

这个题目说的是,给你一个排好序的整数数组,里面的数字都出现两次,只有一个数字出现了一次,我们管它叫单身数字,你要写代码找到这个单身数字。

比如说给你的有序数组是:

1, 1, 2, 2, 4, 4, 6, 8, 8

这个数组里 6 只出现了一次,因此你要返回的数字就是 6。

相关视频:6. 单身数字

代码

public class AlgoCasts {

  // Time: O(n), Space: O(1)
  public int singleNumInSortedArrayWithXOR(int[] nums) {
    int result = 0;
    for (int num: nums) result ^= num;
    return result;
  }

  // Time: O(log(n)), Space: O(1)
  public int singleNumInSortedArrayBinarySearch(int[] nums) {
    int low = 0, high = nums.length - 1;
    while (low <= high) {
      int mid = low + (high - low)/2;
      if (mid-1 >= 0 && nums[mid-1] == nums[mid]) {
        --mid;
      } else if (mid+1 < nums.length && nums[mid+1] == nums[mid]) {
      } else {
        return nums[mid];
      }
      if ((mid-low) % 2 == 1) high = mid - 1;
      else low = mid + 2;
    }
    return -1;
  }

}

📡 通讯频道