Computer >> Máy Tính >  >> Lập trình >> C ++

Di chuyển tối thiểu đến các phần tử mảng bằng nhau trong C ++

Giả sử chúng ta có một mảng kích thước n, chúng ta phải tìm số lần di chuyển tối thiểu cần thiết để làm cho tất cả các phần tử của mảng giống nhau, trong đó một lần di chuyển có nghĩa là tăng n - 1 phần tử lên 1.

Vì vậy, nếu đầu vào là [3,2,3,4], thì đầu ra sẽ là 4.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • n:=kích thước của nums

  • nếu n giống 0 thì -

    • trả về 0

  • sắp xếp số mảng

  • ans:=0

  • để khởi tạo i:=0, khi i

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

  • trả lại ans

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau đây để hiểu rõ hơn -

#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));
}

Đầu vào

{3,2,3,4}

Đầu ra

4