在本文中,我们给出了一个整数数组和一个关键字。我们需要在数组中重复查找关键字,并在每次查找时将其加倍。我们需要返回在进行这个操作时数组中不存在的值。
查看一些输入场景以了解该方法在不同情况下的工作原理
让我们来看一个数组 [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