`

二分查找有序数组并插入(不能解决TopK问题)

阅读更多
需求:将一个数插入(替换原来的数)到一个有续的数组中,插入成功后,还要保证该数组中的数是有序的

思考:

1)、用二分查找法找到这个数在数组中的位置:
         位置的可能情况:
         index 最小:0
         index 最大:数组的长度
         index 在数组中:放入后该位置比上一个数大,比下一个数小。

时间复杂度:O(logN)

2)TopK:找到位置后,插入数据,然后后面的数整体向后移动一位(假设为找出最小的K个)。这比方法当K的值较大的时候,也是非常耗时的。对于这种问题,效率比较高的解决方法是使用最小堆。




public class Search_Binary {

    /**
     * 二分查找法:找到一个元素在数组中的下标
     * @param arr 数组
     * @param key 要插入的元素
     * @return 
     * 如:
     * arr =  [1, 4, 6, 7, 10, 11, 15] 
     *    查找7: 返回 3 
     *    查找8:返回 4
     *    查找-1:返回 0 
     *    查找16:返回 7 (越界)
     */
    public int binarySearchIndex(int[] array,int key) {
        int min,max,mid;
        min = 0;
        max = array.length - 1;
        
        while(min <= max) {
            
            mid = (min + max) >> 1;
        
            if (key > array[mid]) {
                min = mid + 1;
            } else if (key < array[mid]) {
                max = mid - 1;
            } else {
                return mid;
            }
        }
        return min;
    }
    
    @Test
    public void testcases() {
        int[] arr = new int[] {1, 4, 6, 7, 10, 11, 15};
        
        System.out.println(binarySearchIndex(arr, 7)); // 3
        
        System.out.println(binarySearchIndex(arr, 8)); // 4
        
        System.out.println(binarySearchIndex(arr, -3)); // 0
        
        System.out.println(binarySearchIndex(arr, 26)); // 7 (越界)
    }
}






















-

分享到:
评论

相关推荐

    基于二分查找的有序表在做topK算法的给力实现

    6. **代码实现**:“BinarySearchST-master”可能包含了一个具体的二分查找静态表的实现,我们可以通过阅读源码来学习如何结合二分查找和有序表解决topK问题。 综上,这个主题将涉及数据结构(有序表)、算法(二分...

    Algorithm-LintCode.zip

    同时,二分查找则常用于有序数组的查找,提高了效率。 8. **贪心算法**:贪心策略通常用于局部最优解可以推导出全局最优解的问题,如活动选择问题、霍夫曼编码等。 9. **堆与优先队列**:堆(如最大堆、最小堆)...

    LeetCode 用户最喜欢的100题 | 面试最容易被问到的题

    3. **二分查找与排序**:二分查找是一种在有序数组中快速查找元素的算法,而排序则涉及到快速排序、归并排序、堆排序等多种算法。这些基础算法的熟练掌握对于解决面试中的数据处理问题至关重要。 4. **回溯法与深度...

    面试常见算法题

    1. **二分查找**:二分查找是一种在有序数组中寻找特定元素的搜索算法。它通过不断缩小查找范围,每次将查找区间减半,直到找到目标元素或确定其不存在。了解如何设计递归或迭代的二分查找算法,并能处理边界条件是...

    Go-go-algorithms-使用golang实现不同的算法和数据结构

    对于大规模数据,二分查找在有序数组中的优势明显。 3. **图算法**:DFS和BFS在解决图问题中的应用,如寻找最短路径、判断连通性等。 4. **树结构**:二叉树(如二叉搜索树、AVL树、红黑树)的插入、删除和查找...

    构建大顶堆leetcode-data-structures-and-algorithms:数据结构和算法&编码访谈&LeetCode

    有序数组的二分查找 插值查找 模糊二分查找 散列表 支持插入、删除、查找的散列表 分离链接法处理散列表中的冲突 线性探查法处理散列表中的冲突 二叉树 二叉树的前、中、后序以及层次遍历 支持插入、删除、查找的...

    常用到的一些算法学习.zip

    特别是二分查找,它基于有序数组,效率高,适用于大量数据处理。 3. **图算法**:图论在很多问题中都有应用,如Dijkstra最短路径算法、Floyd-Warshall所有对最短路径算法、拓扑排序和Prim最小生成树算法。这些算法...

    Grokking the Coding Interview - Patterns for Coding Questions.zip

    10. **Pattern Modified Binary Search**:改进的二分查找可能包括在有序数组中查找特定条件的元素,或者在二分查找的基础上进行扩展,如查找最近的元素、插入点等。 这些模式涵盖了算法面试中的一些核心主题,通过...

    信息学奥赛一本通C++——算法和数据结构部分的题目和测试数据

    了解它们的效率和应用场景,比如二分查找在有序数组中的高效应用。 3. **图论算法**:深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim或Kruskal算法)、最短路径(Dijkstra或Floyd算法)等,这些...

    java简单算法

    二分查找适用于有序数组,效率高;线性查找适用于小规模或无序数据;哈希查找利用哈希表实现快速查找,但需要解决哈希冲突问题。 3. **递归与回溯**:递归是解决问题的一种常用方法,如斐波那契数列、汉诺塔问题等...

    LeetCode算法设计

    **二分查找**是一种高效的搜索算法,适用于有序数组。 1. **搜索范围[M]**:给定一个按照升序排列的整数数组`nums`和一个目标值`target`,找到`target`在数组中的开始和结束位置。如果目标值不存在于数组中,则返回...

    20道Python算法题及答案

    2. **二分查找**:二分查找是一种在有序数组中查找特定元素的搜索算法,时间复杂度为O(log n)。理解其工作原理并能编写实现代码是必备技能。 3. **回溯法**:用于解决组合问题或寻找所有可能解的问题,例如八皇后...

    常用算法程序集(C语言描述)(第三版)+源代码

    二分查找适用于有序数组,哈希查找则通过散列函数实现快速定位。 3. **图论算法**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra算法、Floyd算法)以及最小生成树算法(如Prim算法、...

    最新Java 基本算法代码示例+注释

    二分查找在有序数组中尤其高效,其时间复杂度为O(log n)。 3. **递归与分治**:递归是一种函数调用自身的技术,常用于解决复杂问题,如斐波那契数列、汉诺塔问题等。分治策略则将大问题分解为小问题,如快速排序、...

    浙江大学数据结构资料

    二分查找适用于有序数组,效率高;哈希查找通过散列函数快速定位数据,实现近似常数时间的查找。 四、高级数据结构 1. 哈夫曼编码:用于数据压缩,通过构建最优的二叉树实现字符的编码,减少存储空间。 2. B树与B...

    数据结构模拟试卷.docx

    8. 二分查找与判定树:二分查找的判定树同时是一棵完全二叉树和平衡二叉树。 运算题和算法分析涉及到的具体操作包括: 1. 单链表的插入操作:在链表末尾添加新结点。 2. 数组元素去重:移除重复元素并调整数组大小...

    Algorithm-pydsa.zip

    二分查找在已排序的数组中查找元素,其效率远高于线性查找。 3. **图算法**:如深度优先搜索(DFS)和广度优先搜索(BFS),这些算法在处理网络结构、社交网络分析等领域有广泛应用。同时,还包括Dijkstra最短路径算法...

    数据结构与算法内容梳理1

    线性查找效率较低,而二分查找在有序列表中速度较快。哈希表提供了近乎常数时间的查找,但可能遇到哈希冲突,可以通过开放寻址法或链地址法解决。 排序算法是另一个核心话题,包括插入排序、选择排序、交换排序(如...

    算法与数据结构Algorithms+Data+Structures

    搜索算法寻找数据集中的特定元素,二分查找在有序列表中非常有效,而哈希表则提供了近乎常数时间的查找速度。 4. **图和网络**:在许多问题中,数据以节点和边的形式表示为图形,如社交网络、交通网络等。图算法如...

    数据结构算法实现程序

    例如,二分查找法利用了有序数组的特性,可以快速定位目标元素;哈希表通过散列函数提供近乎恒定时间的查找、插入和删除操作;堆可以用于实现优先队列,解决Top-K问题;图的遍历算法则在路径搜索、最短路径计算等...

Global site tag (gtag.js) - Google Analytics