卡片式网站模板下载,适合用dedecms做的网站,重庆关键词搜索排名,建设企业网站登录入口思路一#xff1a;hash#xff0c;键存入元素#xff0c;值存入次数#xff0c;然后遍历#xff0c;不是最优解 思路二#xff1a;二分查找
假设数组为 [1, 1, 2, 2, 3, 4, 4]#xff0c;其中唯一出现一次的元素是 3。在一个有序数组中#xff0c;如果没有唯一的元素hash键存入元素值存入次数然后遍历不是最优解 思路二二分查找
假设数组为 [1, 1, 2, 2, 3, 4, 4]其中唯一出现一次的元素是 3。在一个有序数组中如果没有唯一的元素那么对于每一对数字成对元素的第一个数字一定出现在偶数索引上第二个数字出现在奇数索引上。例如1 的第一个出现位置在索引 0第二个位置在索引 12 的第一个位置在 2第二个位置在 3依此类推当 mid 是偶数时我们可以比较 nums[mid] 和 nums[mid 1]如果它们相等说明到 mid 为止都是成对出现的因此唯一的元素在右半部分。如果 nums[mid] 和 nums[mid 1] 不相等说明唯一的元素在左半部分因为唯一的元素打破了成对出现的规律。在代码中通过 if (mid % 2 1) mid--; 确保 mid 是偶数索引。如果 mid 是奇数就将其减 1使其变为偶数索引。这样我们可以始终确保 mid 是偶数索引便于进行对比 nums[mid] 和 nums[mid 1]从而更有效地缩小查找范围。