栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从小于O(n)的排序数组中查找唯一数字

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从小于O(n)的排序数组中查找唯一数字

分而治之

  • 查看排序序列的第一个和最后一个元素(初始序列为
    data[0]..data[data.length-1]
    )。
  • 如果两者相等,则序列中的唯一元素是第一个(无论序列有多长)。
  • 如果不同,则划分序列并为每个子序列重复。

一般情况下解决 O(log(n)) ,仅在最坏情况下解决O(n)(当每个元素不同时)。

Java代码:

public static List<Integer> findUniqueNumbers(int[] data) {    List<Integer> result = new linkedList<Integer>();    findUniqueNumbers(data, 0, data.length - 1, result, false);    return result;}private static void findUniqueNumbers(int[] data, int i1, int i2, List<Integer> result, boolean skipFirst) {    int a = data[i1];    int b = data[i2];    // homogenous sequence a...a    if (a == b) {        if (!skipFirst) { result.add(a);        }    }    else {        //divide & conquer        int i3 = (i1 + i2) / 2;        findUniqueNumbers(data, i1, i3, result, skipFirst);        findUniqueNumbers(data, i3 + 1, i2, result, data[i3] == data[i3 + 1]);    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/595488.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号