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

2023年 9月 26日 47.3k 0

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

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

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

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

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

登录后复制

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

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

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

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

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

Input: {2, 3, 7, 8, 5, 9}, k = 1
Result: 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

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论