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

การย้ายขั้นต่ำไปยังองค์ประกอบอาร์เรย์ที่เท่ากันใน C ++


สมมติว่าเรามีอาร์เรย์ขนาด n เราต้องหาจำนวนการเคลื่อนไหวขั้นต่ำที่จำเป็นในการทำให้องค์ประกอบอาร์เรย์ทั้งหมดเหมือนกัน โดยที่การย้ายหมายถึงการเพิ่มองค์ประกอบ n - 1 ขึ้น 1

ดังนั้น หากอินพุตเป็น [3,2,3,4] ผลลัพธ์จะเป็น 4

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

  • n :=ขนาดของ nums

  • ถ้า n เท่ากับ 0 แล้ว −

    • คืนค่า 0

  • จัดเรียงตัวเลขอาร์เรย์

  • ตอบ :=0

  • สำหรับการเริ่มต้น i :=0 เมื่อ i

    • ans :=ans + nums[i] - nums[0]

  • กลับมาอีกครั้ง

ตัวอย่าง

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minMoves(vector<int>& nums) {
      int n = nums.size();
      if (n == 0)
         return 0;
      sort(nums.begin(), nums.end());
      int ans = 0;
      for (int i = 0; i < n; i++) {
         ans += nums[i] - nums[0];
      }
      return ans;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,2,3,4};
   cout << (ob.minMoves(v));
}

อินพุต

{3,2,3,4}

ผลลัพธ์

4