使用C++,通过每次成功搜索后将元素加倍来重复搜索一个元素

使用c++,通过每次成功搜索后将元素加倍来重复搜索一个元素

在本文中,我们给出了一个整数数组和一个关键字。我们需要在数组中重复查找关键字,并在每次查找时将其加倍。我们需要返回在进行这个操作时数组中不存在的值。

查看一些输入场景以了解该方法在不同情况下的工作原理

让我们来看一个数组 [1,2,6,3,7,4,9],它的键是 1。

Input: {1, 2, 3, 4, 5, 6}, k = 1Result: 8

登录后复制

如果我们找到 1,我们会将其加倍为 2。

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

如果我们找到2,我们会把它加倍变成4。

如果我们找到4,我们将其加倍为8。

我们返回 8,因为数组中没有元素 8

在另一种情况下,我们考虑一个数组 {2, 3, 7, 8, 5, 9},它的键是 1。

Input: {2, 3, 7, 8, 5, 9}, k = 1Result: 1

登录后复制

我们按原样返回 1,因为输入数组中没有元素 1。

算法

对数组元素进行排序,因为对于小型数组来说,执行二分搜索的复杂度较低。

每当数组中的元素与键值匹配时,将键值加倍,并再次搜索数组以找到与新键匹配的元素。

重复此步骤,直到数组中没有与双倍键值匹配的元素为止。

最终的键值就是得到的输出。

示例(使用向量ADT)

我们通过对数组进行排序来开始实现此方法。之后,我们将完全按照问题所说的去做;搜索并加倍。我们通过二分搜索来进行优化搜索。让我们通过应用相同的逻辑来看看 C++ 程序 –

#include #include #include using namespace std;int solve(vector& arr, int key) {   sort(arr.begin(), arr.end());   bool found = binary_search(arr.begin(), arr.end(), key);   while(found) {      key*=2;      found = binary_search(arr.begin(), arr.end(), key);   }   return key;}int main() {   vector arr = {1,2,6,3,7,4,9};   int key = 1;   cout 

输出

8

登录后复制

示例(不使用向量 ADT)

C++ 程序也遵循相同的逻辑,但不使用向量抽象数据类型。

我们通过对数组进行排序来开始实施这种方法。之后,我们将按照问题要求进行操作;搜索并加倍。我们通过二分搜索进行优化。

#include using namespace std;int SearchElement(int arr[], int n, int k) {   // Sorting is done so binary searching in the element   // would be easier   sort(arr, arr + n);   int max = arr[n - 1]; // Declaring the maximum element in the array   while (k 

输出

12

登录后复制

结论

我们使用了STL二分查找方法,根据是否找到元素返回true或false。我们还可以使用我们自定义的二分搜索实现。 STL提供了优秀的排序和搜索方法,这帮助我们在编写问题时无需过度思考实现。

以上就是使用C++,通过每次成功搜索后将元素加倍来重复搜索一个元素的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2580524.html

(0)
上一篇 2025年3月6日 13:46:09
下一篇 2025年2月22日 20:59:43

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论