Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

H-Index II ใน C++


สมมติว่าเรามีการอ้างอิงจำนวนหนึ่ง (การอ้างอิงเป็นจำนวนเต็มที่ไม่เป็นลบ) ของผู้วิจัย ตัวเลขเหล่านี้เรียงตามลำดับที่ไม่ลดลง เราต้องกำหนดฟังก์ชันเพื่อคำนวณดัชนี h ของผู้วิจัย ตามคำจำกัดความของดัชนี h:"นักวิทยาศาสตร์มีดัชนี h ถ้า h ของเอกสาร N ของเขา/เธอ มีการอ้างอิงอย่างน้อย h รายการแต่ละรายการ และเอกสาร N - h อื่น ๆ มีการอ้างอิงไม่เกิน h รายการแต่ละรายการ"

ดังนั้นหากอินพุตเป็นเหมือนการอ้างอิง =[0,1,4,5,6] ผลลัพธ์จะเป็น 3 ตามที่ระบุว่าผู้วิจัยมีห้าเอกสาร เขาได้ 0, 1, 4, 5, 6 รายการ ตามลำดับ เนื่องจากผู้วิจัยมีเอกสาร 3 ฉบับ แต่ละรายการมีการอ้างอิงอย่างน้อย 4 รายการ และกระดาษอีก 2 รายการที่เหลือมีการอ้างอิงไม่เกิน 4 รายการแต่ละรายการ ดัชนี h จึงเท่ากับ 3

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ans :=0, ต่ำ :=0, n :=ขนาดของอาร์เรย์ สูง :=n – 1

  • ถ้าขนาดของอาร์เรย์ =0 ให้คืนค่า 0

  • ในขณะที่ต่ำ <=สูง −

    • กลาง :=ต่ำ + (สูง - ต่ำ)/2

    • ถ้า A[กลาง] =ขนาดของอาร์เรย์ – กลาง ให้คืนค่า A[กลาง]

    • มิฉะนั้น เมื่อ A[กลาง]> n – กลาง แล้วสูง :=กลาง – 1

    • มิฉะนั้นต่ำ :=กลาง + 1

  • ผลตอบแทน n – สูง – 1

ตัวอย่าง(C++)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int hIndex(vector<int>& A) {
      int ans = 0;
      int low = 0;
      int n = A.size();
      int high = n - 1;
      if(A.size() == 0) return 0;
      while(low <= high){
         int mid = low + (high - low) / 2;
         if(A[mid] == A.size() - mid){
            return A[mid];
         }
         else if(A[mid] > (n - mid)){
            high = mid - 1;
         }
         else low = mid + 1;
      }
      return n - (high + 1);
   }
};
main(){
   Solution ob;
   vector<int> v = {0,1,4,5,7};
   cout << (ob.hIndex(v));
}

อินพุต

[0,1,4,5,6]

ผลลัพธ์

3