日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在本文中,我們給出了一個整數數組和一個關鍵字。我們需要在數組中重復查找關鍵字,并在每次查找時將其加倍。我們需要返回在進行這個操作時數組中不存在的值。

查看一些輸入場景以了解該方法在不同情況下的工作原理

讓我們來看一個數組 [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 <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    int solve(vector<int>& 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<int> arr = {1,2,6,3,7,4,9};
       int key = 1;
       cout << solve(arr, key) << endl;
       return 0;
    }
    

    登錄后復制

    輸出

    8
    

    登錄后復制

    示例(不使用向量 ADT)

    C++ 程序也遵循相同的邏輯,但不使用向量抽象數據類型。

    我們通過對數組進行排序來開始實施這種方法。之后,我們將按照問題要求進行操作;搜索并加倍。我們通過二分搜索進行優化。

    #include <bits/stdc++.h>
    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 < max) {
    
          // search for the element k in the array
          if (binary_search(arr, arr + n, k))
             k *= 2;
          else
          return k;
       }
       return k;
    }
    int main() {
       int arr[] = {1,2,6,3,7,4,9};
       int n = sizeof(arr) / sizeof(arr[0]);
       int k = 3;
       cout << SearchElement(arr, n, k);
       return 0;
    }
    

    登錄后復制

    輸出

    12
    

    登錄后復制

    結論

    我們使用了STL二分查找方法,根據是否找到元素返回true或false。我們還可以使用我們自定義的二分搜索實現。 STL提供了優秀的排序和搜索方法,這幫助我們在編寫問題時無需過度思考實現。

    以上就是使用C++,通過每次成功搜索后將元素加倍來重復搜索一個元素的詳細內容,更多請關注www.xfxf.net其它相關文章!

分享到:
標簽:元素加倍 關鍵詞:C 搜索
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定