C++程序以查找数组中第二大的元素

c++程序以查找数组中第二大的元素

数组的目的是将相似类型的数据存储在一系列可以使用基地址和索引访问的内存位置中。我们在许多不同的应用程序中使用数组来保存用于各种目的的数据。查找最小和最大元素是数组的一个相当常见的示例,在包括排序等在内的多个应用程序中都需要数组。在本文中,我们将了解如何在 C++ 中从数组中查找第二大元素

通过示例理解概念

Given array A = [89, 12, 32, 74, 14, 69, 45, 12, 99, 85, 63, 32]The second largest element is 89

在上面的示例中,数组中有 12 个元素。数组中最大的元素是99,第二大的元素是89。第一种方法中要找到第二大的元素,我们只需将元素按升序或降序排序,然后直接返回倒数第二个或第二个元素获得第二大元素。算法如下 –

算法

取大小为n的数组A

根据数组 A 的值的非递增顺序对数组 A 进行排序

立即学习“C++免费学习笔记(深入)”;

返回 A[ 1 ] // 因为第 0 个索引包含最大元素

示例

#include #include # define Z 30using namespace std;void displayArr(int arr[], int n ) {   for( int i = 0; i < n; i++ ){      cout << arr[ i ] << ", ";   }    cout << endl;} int getSecondLargest( int A[], int n ){   sort( A, A + n, greater() );   return A[ 1 ];}int main() {   int arr[ Z ] = {84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20};   int n = 15;      cout << "Given array elements: ";   displayArr( arr, n);      cout << "The second largest element: " << getSecondLargest( arr, n ); }

输出

Given array elements: 84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20, The second largest element: 94

使用双重遍历

上面的方法看起来很简单,但是这个过程对于这个问题来说效率不高。由于我们使用排序,因此执行排序至少需要 O(n.log n) 时间。但我们也可以在线性时间内解决这个问题。在当前的方法中,我们两次遍历元素数组并找到第二大元素。让我们检查一下算法。

算法

取大小为n的数组A

最大 := -无穷大

秒最大 := -无穷大

对于 A 中的每个元素 e,执行

如果 e 大于 Maximum,则

最大= e

结束如果

结束

对于 A 中的每个元素 e,执行

如果e大于secLargest但小于maximum,则

秒最大= e

结束如果

结束

返回秒最大

示例

#include #include # define Z 30using namespace std;void displayArr(int arr[], int n ) {   for( int i = 0; i < n; i++ ){      cout << arr[ i ] << ", ";   }    cout << endl;} int getSecondLargest( int A[], int n ){   int largest = -99999;   for( int i = 0; i  largest ){         largest = A [ i ];       }      }   int secLargest = -99999;   for( int i = 0; i  secLargest && A[i] < largest ){         secLargest = A [ i ];       }      }   return secLargest;}int main() {   int arr[ Z ] = {84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20};   int n = 15;      cout << "Given array elements: ";   displayArr( arr, n);      cout << "The second largest element: " << getSecondLargest( arr, n ); }

输出

Given array elements: 84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20, The second largest element: 94

使用单次遍历

上面的解决方案遍历了数组两次。在第一次运行中,从数组中找到最大的元素,然后在第二次运行中,搜索最大但不大于第一个最大的元素。由于数组是线性数据结构,每次遍历都需要 O(n) 时间,因此最终求解的时间为 O(2n),也是线性的,与 O(n) 类似。但这不是一个有效的解决方案,我们只能通过一次遍历来解决这个问题。让我们看看它的算法。

算法

取大小为n的数组A

最大 := A[0]

对于从 1 到 n – 1 的起始索引,执行

如果当前元素A[ i ]大于maximum,则

秒最大 := 最大

最大 := A[ i ]

否则当 A[ i ] 介于largest 和 secLargest 之间时,则

秒最大 := A[ i ]

结束如果

结束

返回秒最大

示例

#include #include # define Z 30using namespace std;void displayArr(int arr[], int n ) {   for( int i = 0; i < n; i++ ){      cout << arr[ i ] << ", ";   }    cout << endl;} int getSecondLargest( int A[], int n ){   int largest = A[ 0 ];   int secLargest = -9999;   for( int i = 1; i  largest ){         secLargest = largest;          largest = A[ i ];      }         else if( secLargest < A[ i ] && A[ i ] != largest ) {         secLargest = A[ i ];      }   }    return secLargest;}int main() {   int arr[ Z ] = {84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20};   int n = 15;      cout << "Given array elements: ";   displayArr( arr, n);      cout << "The second largest element: " << getSecondLargest( arr, n ); }

输出

Given array elements: 84, 56, 21, 32, 74, 96, 85, 41, 21, 94, 20, 37, 36, 75, 20, The second largest element: 94

结论

在本文中,我们了解了从给定数组中查找第二大元素的三种不同方法。第一种方法是使用排序。然而,这个解决方案效率不高,并且至少需要 O(n log n ) 时间。后一种解决方案非常有效,因为它们需要线性时间。第二种解决方案是在数组上使用双重遍历,也可以通过单次遍历进行优化,如第三种解决方案所示。

以上就是C++程序以查找数组中第二大的元素的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1445305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:23:38
下一篇 2025年12月8日 20:55:58

相关推荐

  • C++程序将数组转换为集合(哈希集合)

    数组是 C++ 中可用的数据结构,用于保存相同类型元素的顺序集合。数组的大小是固定的,但可以根据需要扩展或缩小。将数组视为相同类型变量的集合很重要,即使它用于存储数据集合。集合(或者在本例中为无序集合)是一种以任意顺序存储特定数据类型的元素的容器。哈希表用于实现 unordered_set,其中键被…

    2025年12月17日
    000
  • 使用C++编写,找到数组中的素数对数量

    在本文中,我们将解释有关使用 C++ 查找数组中素数对数量的所有内容。我们有一个整数数组 arr[],我们需要找到其中存在的所有可能的素数对。这是问题的示例 – Input : arr[ ] = { 1, 2, 3, 5, 7, 9 }Output : 6From the given a…

    2025年12月17日
    000
  • 在给定的数组中找到最后一个回文字符串

    在这个问题中,我们需要找到数组中的最后一个回文字符串。如果任何字符串在读取时相同,无论是从头开始读取还是从末尾开始读取,都可以说该字符串是回文。我们可以比较起始字符和结束字符来检查特定字符串是否是回文。查找回文字符串的另一种方法是将字符串反转并与原始字符串进行比较。 问题陈述 – 我们给…

    2025年12月17日
    000
  • 按照给定的查询重新排列和更新数组元素

    在这个问题中,我们将对数组元素执行给定的查询。查询包含数组元素的循环左旋转、右旋转和更新。 解决问题的逻辑部分是数组旋转。向左旋转数组的简单方法是将每个元素替换为下一个元素,将最后一个元素替换为第一个元素。 我们可以使用deque数据结构来高效地旋转数组。 问题陈述 – 我们给出了一个包…

    2025年12月17日
    000
  • C++程序:在数组中找到最大的可整除子集

    本教程将讨论一个问题,其中给定一个不同的正整数数组。我们需要找到最大的子集,使得每对较大的元素除以较小的元素,例如 – Input: nums[ ] = { 1, 4, 2, 6, 7}Output: 1 2 4Explanation:All Divisible subsets are:…

    2025年12月17日
    000
  • C++程序:对数组元素进行升序排序

    为了有效地解决一些问题,将数据项排列在正确的位置非常重要顺序。最流行的排列问题之一是元素排序问题。这本文将演示如何在 C++ 中按升序排列数组成员(根据值不断上升)。 要按特定顺序排列数字或非数字元素,有多种方法排序算法可用于该领域。只需两种简单的排序技术即可将在本文中介绍。选择排序和冒泡排序。让我…

    2025年12月17日
    000
  • 查找字符串长度的C程序

    这个字符串实际上是一个由字符组成的一维数组,以一个null 字符’’结尾。因此,一个以null结尾的字符串包含组成字符串的字符,后面跟着一个null。 要找到字符串的长度,我们需要循环并计算循环中的所有字符,直到匹配到‘’字符为止。 例如 输入 −naman  输出 − 字符…

    2025年12月17日
    000
  • 找到C++中修改后数组的最小值的最大可能值

    在这个问题中,我们给定一个大小为 n 的数组 arr[] 和一个数字 S。我们的任务是找到修改后的数组的最小值的最大可能值。 p> 这里是修改数组的规则, 修改前后数组元素之和应为S。 修改后的数组中不允许有负值。 如果修改后的数组,需要数组的最小值最大化。 立即学习“C++免费学习笔记(深入…

    2025年12月17日
    000
  • 如何在C语言中将整个数组作为参数传递给函数?

    数组 数组是一组具有相同名称的相关项。以下是将数组作为参数传递给函数的两种方式: 将整个数组作为参数传递给函数将单个元素作为参数传递给函数 将整个数组作为参数传递给函数 要将整个数组作为参数传递,只需在函数调用中发送数组名称。 要接收一个数组,必须在函数头中声明。 示例1 #includemain …

    2025年12月17日
    000
  • 根据给定条件,从数组中构建一个长度为K的二进制字符串

    在本教程中,我们需要构造一个长度为 K 的二进制字符串,如果使用数组元素可以实现等于 I 的子集和,则它的第 i 个索引处应包含“1”。我们将学习两种解决问题的方法。在第一种方法中,我们将使用动态规划方法来检查子集和等于索引“I”是否可能。在第二种方法中,我们将使用位集通过数组元素查找所有可能的和。…

    2025年12月17日
    000
  • C++程序在数组开头添加元素

    通过使用数组和数据结构,可以在多个内存位置上存储同质(相同)数据。使用数组的关键好处是我们可以使用索引参数从任何位置检索它们。这种数据结构变得线性,因为数据必须逐步插入和提取。我们只需要将该元素的索引或位置号放在方括号内,就可以从数组中检索它。在本文中,我们将使用数组A和另一个元素e。我们将在C++…

    2025年12月17日
    000
  • 使用C++找到数组中唯一配对的数量

    我们需要适当的知识才能在 C++ 的数组语法中创建几个唯一的对。在查找唯一对的数量时,我们计算给定数组中的所有唯一对,即可以形成所有可能的对,其中每个对应该是唯一的。例如 – Input : array[ ] = { 5, 5, 9 }Output : 4Explanation : Th…

    2025年12月17日
    000
  • 一个数组可以重复分割成具有相等和的子数组的次数

    在C++中,我们有一个vector头文件,可以在运行时更改数组的大小。在本文中,我们将学习数组可以重复分割成具有相等和的子数组的次数的概念。 Let’s take an example to show an array partition with an equal sum. 给定的数组是{1,2,…

    2025年12月17日
    000
  • C程序用于在数组中找到第二大和第二小的数字

    输入数组元素,然后使用交换技术按降序排列数字。随后,在索引位置的帮助下,尝试打印数组中第二大和第二小的元素。 数组用于保存同一个名称下的一组公共元素。 数组用于保存同一个名称下的一组公共元素。 p> C 语言中的数组操作如下 – 插入删除搜索 li> 算法 下面给出的是一种查…

    2025年12月17日
    000
  • 用C++编写一个程序,找出数组中所有元素对之间第k小的差值

    假设我们有一个包含多个整数的列表。我们必须找出数组中每对值之间的差异,并找出第 k 个最小的差异数。索引从 0 开始,值 k 作为输入提供给我们。 因此,如果输入类似于numbers = {2, 6, 4, 8}, k = 2,那么输出将为 2。 两对之间的差异为 – (2, 6) = …

    2025年12月17日
    000
  • C程序在数组中找到最小和最大的质数

    问题陈述 给定一个包含 n 个正整数的数组。我们必须找到素数具有最小值和最大值的数字。 如果给定的数组是 – arr [] = {10, 4, 1, 12, 13, 7, 6, 2, 27, 33}then minimum prime number is 2 and maximum pr…

    2025年12月17日
    000
  • 使用给定的操作将数组缩减为一个整数,使用C++实现

    给定一个整数变量Number作为输入。让我们考虑一个包含范围在1到Number之间的元素的数组,元素的顺序可以是任意的。如果我们在数组上执行Number-1次操作,操作如下: 我们从数组中选择两个元素A和B 从数组中移除A和B 将A和B的平方和添加到数组中 立即学习“C++免费学习笔记(深入)”; …

    2025年12月17日
    000
  • 使用C++将数组重新排列为最大最小形式

    我们得到一个排序数组。我们需要以最大、最小形式排列这个数组,即第一个元素是最大元素,第二个元素是最小元素,第三个元素是第二个最大元素,第四个元素是第二个最小元素,依此类推,例如 – Input : arr[ ] = { 10, 20, 30, 40, 50, 60 }Output : {…

    2025年12月17日
    000
  • 在C/C++中,4维数组

    一个4维数组是由3维数组组成的数组。 算法 Begin. Declare the variables. Declare the array elements. Take the no of elements as input. Take the elements as input. Print th…

    2025年12月17日
    000
  • 在C程序中,从给定的数组中打印下三角矩阵模式

    给定一个 n x n 的矩阵,任务是以下三角形式打印出该矩阵。 下三角矩阵是一个矩阵,其主对角线以下的元素包括主对角线元素,其余元素均为零。 我们通过以下图示来理解: 上述绿色元素是主对角线以下的元素,红色元素是主对角线以上的元素,它们被设为零。 示例 Input: matrix[3][3] = {…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信