热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

排序数组中的第k个缺失元素

排序数组中的第k个缺失元素原文:ht

排序数组中的第k个缺失元素

原文: https://www.geeksforgeeks.org/k-th-missing-element-in-sorted-array/

给定一个递增的序列a[],我们需要在递增的序列中找到第K个缺失的连续元素,该元素在序列中不存在。 如果没有第k个缺失元素,则输出 -1。

示例

Input : a[] = {2, 3, 5, 9, 10};
k = 1;
Output : 4
Explanation: Missing Element in the increasing
sequence are {4, 6, 7, 8}. So k-th missing element
is 4
Input : a[] = {2, 3, 5, 9, 10, 11, 12};
k = 4;
Output : 8
Explanation: missing element in the increasing
sequence are {4, 6, 7, 8} so k-th missing
element is 8

方法:开始遍历数组元素,并对每个元素检查下一个元素是否连续,如果不连续,则取这两个元素之间的差,并检查差值是否大于或等于给定的k,然后计算ans = a[i] + count,否则迭代下一个元素。

C++

#include
using namespace std;
// Function to find k-th 
// missing element
int missingK(int a[], int k, 
             int n)
{
    int difference = 0, 
        ans = 0, count = k;
    bool flag = 0;
    // interating over the array
    for(int i = 0 ; i     {   
        difference = 0;
        // check if i-th and 
        // (i + 1)-th element 
        // are not consecutive
        if ((a[i] + 1) != a[i + 1]) 
        {
            // save their difference
            difference += 
                (a[i + 1] - a[i]) - 1;
            // check for difference
            // and given k
            if (difference >= count)
                {
                    ans = a[i] + count;
                    flag = 1;
                    break;
                }
            else
                count -= difference;
        }
    }
    // if found
    if(flag)
        return ans;
    else
        return  -1;
}
// Driver code
int main()
{
    // Input array
    int a[] = {1, 5, 11, 19};
    // k-th missing element 
    // to be found in the array
    int k = 11;
    int n = sizeof(a) / sizeof(a[0]);
    // calling function to
    // find missing element
    int missing = missingK(a, k, n);
    cout <    return 0;
}

Java

// Java program to check for
// even or odd
import java.io.*;
import java.util.*;
public class GFG {
    // Function to find k-th 
    // missing element
    static int missingK(int []a, int k, 
                                 int n)
    {
        int difference = 0, 
            ans = 0, count = k;
        boolean flag = false;
        // interating over the array
        for(int i = 0 ; i         { 
            difference = 0;
            // check if i-th and 
            // (i + 1)-th element 
            // are not consecutive
            if ((a[i] + 1) != a[i + 1]) 
            {
                // save their difference
                difference += 
                    (a[i + 1] - a[i]) - 1;
                // check for difference
                // and given k
                if (difference >= count)
                    {
                        ans = a[i] + count;
                        flag = true;
                        break;
                    }
                else
                    count -= difference;
            }
        }
        // if found
        if(flag)
            return ans;
        else
            return -1;
    }
    // Driver code
    public static void main(String args[])
    {
        // Input array
        int []a = {1, 5, 11, 19};
        // k-th missing element 
        // to be found in the array
        int k = 11;
        int n = a.length;
        // calling function to
        // find missing element
        int missing = missingK(a, k, n);
        System.out.print(missing);
    }
}
// This code is contributed by
// Manish Shaw (manishshaw1)

Python3

# Function to find k-th 
# missing element
def missingK(a, k, n) :
    difference = 0
    ans = 0
    count = k
    flag = 0
    # interating over the array
    for i in range (0, n-1) : 
        difference = 0
        # check if i-th and 
        # (i + 1)-th element 
        # are not consecutive
        if ((a[i] + 1) != a[i + 1]) :
            # save their difference
            difference += (a[i + 1] - a[i]) - 1
            # check for difference
            # and given k
            if (difference >= count) :
                    ans = a[i] + count
                    flag = 1
                    break
            else :
                count -= difference     
    # if found
    if(flag) :
        return ans
    else :
        return -1
# Driver code
# Input array
a = [1, 5, 11, 19]
# k-th missing element 
# to be found in the array
k = 11
n = len(a)
# calling function to
# find missing element
missing = missingK(a, k, n)
print(missing)
# This code is contributed by 
# Manish Shaw (manishshaw1)

C#

// C# program to check for
// even or odd
using System;
using System.Collections.Generic;
class GFG {
    // Function to find k-th 
    // missing element
    static int missingK(int []a, int k, 
                                 int n)
    {
        int difference = 0, 
            ans = 0, count = k;
        bool flag = false;
        // interating over the array
        for(int i = 0 ; i         { 
            difference = 0;
            // check if i-th and 
            // (i + 1)-th element 
            // are not consecutive
            if ((a[i] + 1) != a[i + 1]) 
            {
                // save their difference
                difference += 
                    (a[i + 1] - a[i]) - 1;
                // check for difference
                // and given k
                if (difference >= count)
                    {
                        ans = a[i] + count;
                        flag = true;
                        break;
                    }
                else
                    count -= difference;
            }
        }
        // if found
        if(flag)
            return ans;
        else
            return -1;
    }
    // Driver code
    public static void Main()
    {
        // Input array
        int []a = {1, 5, 11, 19};
        // k-th missing element 
        // to be found in the array
        int k = 11;
        int n = a.Length;
        // calling function to
        // find missing element
        int missing = missingK(a, k, n);
        Console.Write(missing);
    }
}
// This code is contributed by
// Manish Shaw (manishshaw1)

PHP

// Function to find k-th 
// missing element
function missingK(&$a, $k, $n)
{
    $difference = 0;
    $ans = 0;
    $count = $k;
    $flag = 0;
    // interating over the array
    for($i = 0 ; $i <$n - 1; $i++)
    { 
        $difference = 0;
        // check if i-th and 
        // (i + 1)-th element 
        // are not consecutive
        if (($a[$i] + 1) != $a[$i + 1]) 
        {
            // save their difference
            $difference += ($a[$i + 1] - 
                            $a[$i]) - 1;
            // check for difference
            // and given k
            if ($difference >= $count)
                {
                    $ans = $a[$i] + $count;
                    $flag = 1;
                    break;
                }
            else
                $count -= $difference;
        }
    }
    // if found
    if($flag)
        return $ans;
    else
        return -1;
}
// Driver Code
// Input array
$a = array(1, 5, 11, 19);
// k-th missing element 
// to be found in the array
$k = 11;
$n = count($a);
// calling function to
// find missing element
$missing = missingK($a, $k, $n);
echo $missing;
// This code is contributed by Manish Shaw
// (manishshaw1)
?>

输出

14

时间复杂度O(n),其中n是数组中元素的数量。





推荐阅读
  • 本文详细解析了客户端与服务器之间的交互过程,重点介绍了Socket通信机制。IP地址由32位的4个8位二进制数组成,分为网络地址和主机地址两部分。通过使用 `ipconfig /all` 命令,用户可以查看详细的IP配置信息。此外,文章还介绍了如何使用 `ping` 命令测试网络连通性,例如 `ping 127.0.0.1` 可以检测本机网络是否正常。这些技术细节对于理解网络通信的基本原理具有重要意义。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式
    大类|电阻器_使用Requests、Etree、BeautifulSoup、Pandas和Path库进行数据抓取与处理 | 将指定区域内容保存为HTML和Excel格式 ... [详细]
  • 属性类 `Properties` 是 `Hashtable` 类的子类,用于存储键值对形式的数据。该类在 Java 中广泛应用于配置文件的读取与写入,支持字符串类型的键和值。通过 `Properties` 类,开发者可以方便地进行配置信息的管理,确保应用程序的灵活性和可维护性。此外,`Properties` 类还提供了加载和保存属性文件的方法,使其在实际开发中具有较高的实用价值。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 构建基础的字符串队列实现方法
    在探讨如何构建基础的字符串队列实现方法时,我们发现许多开发者在面对这一问题时常常感到困惑。实际上,队列的基本原理非常简单,即遵循先进先出的原则。然而,在具体实现过程中,需要注意的是Java语言中并没有指针的概念,因此需要通过嵌套类来模拟指针,进而构建链表结构。这种实现方式不仅能够有效地管理字符串数据,还能提升代码的可读性和维护性。 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 深入解析Java虚拟机的内存分区与管理机制
    Java虚拟机的内存分区与管理机制复杂且精细。其中,某些内存区域在虚拟机启动时即创建并持续存在,而另一些则随用户线程的生命周期动态创建和销毁。例如,每个线程都拥有一个独立的程序计数器,确保线程切换后能够准确恢复到之前的执行位置。这种设计不仅提高了多线程环境下的执行效率,还增强了系统的稳定性和可靠性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在Java中,当创建一个对象时,首先会为该对象的所有实例变量分配内存(前提是类已经加载),随后执行实例变量的初始化。接着,系统会按顺序执行静态初始化块、非静态初始化块以及构造器中的代码,确保对象的完整初始化。这一过程保证了对象的状态在创建时是正确且一致的。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 本文详细介绍了 Java 中遍历 Map 对象的几种常见方法及其应用场景。首先,通过 `entrySet` 方法结合增强型 for 循环进行遍历是最常用的方式,适用于需要同时访问键和值的场景。此外,还探讨了使用 `keySet` 和 `values` 方法分别遍历键和值的技巧,以及使用迭代器(Iterator)进行更灵活的遍历操作。每种方法都附有示例代码和具体的应用实例,帮助开发者更好地理解和选择合适的遍历策略。 ... [详细]
  • 在Java基础中,私有静态内部类是一种常见的设计模式,主要用于防止外部类的直接调用或实例化。这种内部类仅服务于其所属的外部类,确保了代码的封装性和安全性。通过分析JDK源码,我们可以发现许多常用类中都包含了私有静态内部类,这些内部类虽然功能强大,但其复杂性往往让人感到困惑。本文将深入探讨私有静态内部类的作用、实现方式及其在实际开发中的应用,帮助读者更好地理解和使用这一重要的编程技巧。 ... [详细]
author-avatar
鱼mm不会游泳456
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有