C++程序,用于计算数组元素大于其左侧所有元素且至少有K个元素在其右侧的数量

c++程序,用于计算数组元素大于其左侧所有元素且至少有k个元素在其右侧的数量

字符串是一个对象,它表示数据字符的序列。字符串是始终表示为文本格式的数据容器。它还用于概念、比较、拆分、连接、替换、修剪、长度、实习、等于、比较、子字符串操作。使用快速排序分区算法的数组中的 K 个最大(或最小)元素

这是一个数组 R[],其中包含 N 个不同的整数。任务是找到那个特定元素,该元素严格大于其前面的所有元素,并且严格大于其右侧的至少 K 个元素。该问题指出,一个由 N 个不同元素和整数 K 组成的数组 arr[ ](数组 R);我们必须找出比其左侧所有元素都大的元素个数,并且其右侧至少有 K 个元素。

Input: R[] = {16,07,10,22,2001,1997}, K = 3Output: 16Therefore, the count is 2.

有两种方法可以找出大于左侧所有元素且右侧至少 K 个元素的数组元素。

朴素方法 – 这是遍历特定数组的最简单方法。在这个方法中,我们必须向左侧遍历所有元素来检查它是否较小。否则,向右遍历,检查最小的 K 个元素是否较小。对于这种方法,时间复杂度为 O(N2),辅助空间为 O(1)。

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

高效方法 – 这是一个可以通过自平衡 BST 完成的优化过程。通过AVL Tree从右向左一一遍历数组。 AVL Tree 生成一个数组 countSmaller[]。这里时间复杂度是O(NlogN),辅助空间是O(N)。对于满足满足条件的每个元素,增加计数。

让我们找出数组元素的数量大于其左侧所有元素且右侧至少有 K 个元素。

计算大于所有元素的数组元素的算法:-

在此算法中,我们将按照一步一步的过程来计算数组元素的数量。通过这个,我们将构建一些 C++ 代码来找到所有元素中最大的元素。

第 1 步 – 开始。

第 2 步 – 从右向左遍历数组。

第 3 步 – 将所有元素插入 AVL 树中。

第 4 步 – 通过使用 AVL 树生成数组 countSmaller[]。

第 5 步 – 它包含每个数组元素右侧较小元素的计数。

第 6 步 – 遍历数组并查找每个元素。

第 7 步 – 检查是否是迄今为止获得的最大值,并且 countSmaller[i] 是否大于或等于 K。

第 8 步 – 如果满足条件,则增加计数。

第 9 步 – 打印 count 的最终值作为答案。

第 10 步 – 终止。

语法

for (i = k; i < array.length; i++){minIndex = 0;for (int j = 0; j < k; j++){   if(array[j] < array[minIndex]){      minIndex = j;      array[minIndex] = array[j];   }}if (array[minIndex] < array[i]){   int temp = array[minIndex];   array[minIndex] = array[i];   array[i] = temp;}

这里是一个整数数组num,整数为K。它将返回数组中的第K个元素。我们必须以 O(n) 的时间复杂度来解决它。

方法

方法 1 – 使用排序查找 K 个最大(或最小)元素。

方法 2 – 查找数组中 K 最大(或最小)元素的有效方法。

使用排序查找 K 最大(或最小)元素

通过排序的方法我们可以得到这个问题的结果。以下是步骤 –

元素降序排序。

打印该排序数组中的前 K 个数字。

示例 1

#include using namespace std;void kLargest(int arr[], int a, int b){   sort(arr, arr + a, greater());   for (int i = 0; i < b; i++)   cout << arr[i] << " ";}int main(){   int arr[] = { 10, 16, 07, 2001, 1997, 2022, 50 };   int n = sizeof(arr) / sizeof(arr[0]);   int k = 3;   kLargest(arr, n, k);}

输出

2022 2001 1997 

查找数组中 K 个最大(或最小)元素的有效方法

在此方法中,我们将按照以下步骤找出结果 –

开始。

从右向左遍历数组。

插入 AVL 树中的所有元素。

生成数组 countSmaller[]。

每个数组元素右侧较小元素的计数。

如果是最大值,则countSmaller[i]大于等于K。

然后增加计数。

打印该值。

结束。

示例 2

#include using namespace std;struct node {   int key;   struct node* left;   struct node* right;   int height;   int size;};int max(int a, int b);int height(struct node* N){   if (N == NULL)   return 0;   return N->height;}int size(struct node* N){   if (N == NULL)   return 0;   return N->size;}int max(int a, int b){   return (a > b) ? a : b;}struct node* newNode(int key){   struct node* node   = (struct node*)   malloc(sizeof(struct node));   node->key = key;   node->left = NULL;   node->right = NULL;   node->height = 1;   node->size = 1;   return (node);}struct node* rightRotate(struct node* y){   struct node* x = y->left;   struct node* T2 = x->right;   x->right = y;   y->left = T2;   y->height = max(height(y->left),   height(y->right))   + 1;   x->height = max(height(x->left),   height(x->right))   + 1;   y->size = size(y->left)   + size(y->right) + 1;   x->size = size(x->left)   + size(x->right) + 1;   return x;}struct node* leftRotate(struct node* x){   struct node* y = x->right;   struct node* T2 = y->left;   y->left = x;   x->right = T2;   x->height = max(height(x->left),   height(x->right))   + 1;   y->height = max(height(y->left),   height(y->right))   + 1;   x->size = size(x->left)   + size(x->right) + 1;   y->size = size(y->left)   + size(y->right) + 1;   return y;}int getBalance(struct node* N){   if (N == NULL)   return 0;   return height(N->left)   - height(N->right);}struct node* insert(struct node* node, int key,int* count){   if (node == NULL)      return (newNode(key));   if (key key)      node->left = insert(node->left, key, count);   else {      node->right = insert(node->right, key, count);      *count = *count + size(node->left) + 1;   }   node->height = max(height(node->left),   height(node->right))   + 1;   node->size = size(node->left)   + size(node->right) + 1;   int balance = getBalance(node);   if (balance > 1 && key left->key)   return rightRotate(node);   if (balance  node->right->key)   return leftRotate(node);   if (balance > 1 && key > node->left->key) {      node->left = leftRotate(node->left);      return rightRotate(node);   }   if (balance < -1 && key right->key) {      node->right = rightRotate(node->right);      return leftRotate(node);   }   return node;}void constructLowerArray(int arr[],int countSmaller[],int n){   int i, j;   struct node* root = NULL;   for (i = 0; i = 0; i--) {      root = insert(root, arr[i], &countSmaller[i]);   }}int countElements(int A[], int n, int K){   int count = 0;   int* countSmaller = (int*)malloc(sizeof(int) * n);   constructLowerArray(A, countSmaller, n);   int maxi = INT_MIN;   for (int i = 0; i  maxi && countSmaller[i] >= K) {         count++;         maxi = A[i];      }   }   return count;}int main(){   int A[] = { 16, 10, 2022, 1997, 7, 2001, 0 };   int n = sizeof(A) / sizeof(int);   int K = 3;   cout << countElements(A, n, K);   return 0;}

输出

2

结论

这样我们就知道如何编写 C++ 代码来计算数组元素的数量大于其左侧所有元素且右侧至少有 K 个元素。

以上就是C++程序,用于计算数组元素大于其左侧所有元素且至少有K个元素在其右侧的数量的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 22:31:11
下一篇 2025年12月17日 22:31:24

相关推荐

  • 解析基于元素位置的固定定位原理

    固定定位:基于元素位置的固定定位原理解析,需要具体代码示例 如果你在网页设计或开发中曾经需要固定某个元素的位置,那么你就会用到CSS中的固定定位(position:fixed)。固定定位是一种可以将元素固定在页面的特定位置的CSS布局技术。在本文中,我们将深入探讨固定定位的原理,并提供一些具体的代码…

    2025年12月24日
    000
  • 网页布局中的元素选择器的应用

    元素选择器在网页布局中的应用,需要具体代码示例 随着互联网的不断发展,网页设计和布局变得越来越重要。为了实现网页的美观和功能,我们需要使用 CSS (层叠样式表)来定义网页的外观和样式。而元素选择器是 CSS 中最常用和基本的选择器之一,它能够帮助我们对页面上的元素进行精确的定位和样式设置。 一、元…

    2025年12月24日
    000
  • CSS变形:如何实现元素的旋转效果

    CSS变形:如何实现元素的旋转效果,需要具体代码示例 在网页设计中,动画效果是提高用户体验和吸引用户注意力的重要方式之一,而旋转动画是其中比较经典的一种。在CSS中,使用“transform”属性可以实现元素的各种变形效果,包括旋转。本文将详细介绍如何利用CSS的“transform”实现元素的旋转…

    2025年12月24日
    000
  • CSS过渡效果:如何实现元素的滑动效果

    CSS过渡效果:如何实现元素的滑动效果 引言:在网页设计中,元素的动态效果能够提升用户体验,其中滑动效果是一个常见而又受欢迎的过渡效果。通过CSS的过渡属性,我们可以轻松实现元素的滑动动画效果。本文将介绍如何使用CSS过渡属性来实现元素的滑动效果,并提供具体的代码示例,以帮助读者更好地理解和应用。 …

    2025年12月24日
    000
  • CSS过渡效果:如何实现元素的淡入淡出旋转效果

    CSS过渡效果:如何实现元素的淡入淡出旋转效果 CSS过渡效果是一种用来控制元素状态改变时的动画效果,可以实现元素的平滑过渡。在本篇文章中,我将介绍如何使用CSS来实现元素的淡入淡出旋转效果,并提供具体的代码示例。 首先,我们需要创建一个HTML页面,其中包含要应用过渡效果的元素。下面是一个示例代码…

    2025年12月24日
    000
  • 如何使用CSS实现元素的透明度渐变效果

    如何使用CSS实现元素的透明度渐变效果 在Web开发中,为网页元素添加过渡效果是提升用户体验的重要手段之一。透明度的渐变效果不仅可以使页面变得更加平滑,还可以突出元素的重点内容。本文将介绍如何使用CSS实现元素的透明度渐变效果,并提供具体的代码示例。 使用CSS的transition属性 要实现元素…

    2025年12月24日
    000
  • CSS动画:如何实现元素的抖动效果

    CSS动画:如何实现元素的抖动效果 摘要:CSS动画是网页设计中常用的一种效果,它能够为网页增加动态和生动的感觉。本文将介绍如何使用CSS动画实现元素的抖动效果,并附上具体的代码示例供参考。 引言 在网页设计中,动画效果能够吸引用户的注意力,增加用户对网页的互动性和体验感。其中,CSS动画作为一种简…

    2025年12月24日
    000
  • CSS运动效果:为网页元素添加流动和运动效果

    CSS运动效果:为网页元素添加流动和运动效果,需要具体代码示例CSS(Cascading Style Sheets)是一种用于描述网页元素样式的标记语言,通过使用CSS,我们可以美化网页、改变元素的外观和行为。其中,运动效果是一种非常有趣和常用的样式效果,可以为网页添加活力和吸引力。在本文中,我们将…

    2025年12月24日
    000
  • 如何使用CSS Positions布局实现元素的流体布局

    如何使用CSS Positions布局实现元素的流体布局 在Web开发中,实现元素的流体布局是一项重要的技能。CSS Positions布局是一种常用的方法,可以帮助我们实现元素的自适应和流动性。本文将介绍如何使用CSS Positions布局来实现元素的流体布局,以及具体的代码示例。 CSS Po…

    2025年12月24日
    000
  • css如何选取第几个元素

    css选取第几个元素的方法:1、【first-child】表示选择列表中的第一个标签;2、【last-child】表示选择列表中的最后一个标签;3、【nth-child(3)】表示选择列表中的第3个标签。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 css选取第几个元素的…

    2025年12月24日
    000
  • css中什么属性可为元素设置外边距

    css中margin属性可以为元素设置外边距。margin属性可以定义元素周围的空间,它会清除周围的外边框元素区域。margin属性可以单独改变元素的上下左右边距,也可以一次改变所有的属性。 本教程操作环境:windows7系统、CSS3&&HTML5版、Dell G3电脑。 在cs…

    2025年12月24日
    000
  • css实现元素横向滚动的方法

    分析: 子元素的宽度大于父元素时会出现滚动 overflow-x: scroll; 为水平滚动,overflow-y: scroll; 为垂直滚动,根据需求这里采用水平横向滚动。 (学习视频分享:css视频教程) html代码: 立即学习“前端免费学习笔记(深入)”; 2元 XXXXXX 满1000…

    2025年12月24日
    000
  • css如何实现不显示元素

    css实现不显示元素的方法:可以利用display和visibility属性实现,如【display:none;visibility:hidden;】。display属性规定元素应该生成的框的类型,visibility属性规定元素是否可见。 css中的display和visibility属性都可以用…

    2025年12月24日
    000
  • css3中让图像居中可以使用哪个元素

    css3中让图像居中可以使用【align-items:center】元素和【justify-content:center】元素。align-items属性定义flex子项在flex容器的当前行的纵轴方向上的对齐方式。 方法: 采用 align-items:center(垂直居中)和justify-c…

    2025年12月24日
    000
  • css如何禁止元素的点击事件

    在实际工作中,如果我们需要禁止某个元素的点击事件,可以将该元素的pointer-events属性设为none。 (推荐教程:CSS教程) 如下: 立即学习“前端免费学习笔记(深入)”; 测试代码: .disabled { pointer-events: none; cursor: default; …

    2025年12月24日
    000
  • css如何控制元素的显示与隐藏

    属性介绍: (推荐教程:css视频教程) 1. display属性 display属性用于设置一个元素应如何显示。 立即学习“前端免费学习笔记(深入)”; display: none; 隐藏对象display: block; 除了转换为块级元素之外,同时还有显示元素的意思 display隐藏元素后,…

    2025年12月24日
    000
  • 在html元素中设置css样式的方式是什么

    如果我们要在HTML元素中设置CSS样式,那么我们就需要在元素中设置”id” 和 “class”选择器。 (推荐教程:CSS教程) 下面我们来分别说一下id选择器和class选择器。 id选择器 立即学习“前端免费学习笔记(深入)”; id 选择器可以…

    2025年12月24日
    000
  • 如何伸展一个元素到窗口高度

    在具体场景中,我们可能想要将一个元素伸展到窗口高度,基本元素的调整只能调整容器的大小,因此要使一个元素伸展到窗口高度,我们需要伸展顶层元素:html和body。 (推荐教程:css快速入门) 代码实现: html, body { height: 100%;} (视频教程推荐:css视频教程) 然后将…

    2025年12月24日
    000
  • css中隐藏元素的方法有哪些?有什么区别?

    隐藏元素的方法: (推荐学习:css快速入门) display:none 隐藏对应元素,在文档流中不再给他分配空间,各边元素会合拢但是资源会加载,DOM可以访问。 visibility:hidden 隐藏对应元素,但是在文档流中保留原来的空间,资源会加载。 opacity:0 可以点击,占据空间,可…

    2025年12月24日
    000
  • css如何垂直对齐容器中的元素

    可以利用css3的transform来实现容器中的元素垂直对齐。 (推荐学习:css快速入门) 具体代码实现: .verticalcenter{ position: relative; top: 50%; -webkit-transform: translateY(-50%); -o-transfo…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信