แนวคิด
สมมติว่ามีอาร์เรย์ขนาด n ให้หาจำนวนการเคลื่อนย้ายน้อยที่สุดเพื่อทำให้สมาชิกอาร์เรย์ทั้งหมดเท่ากัน โดยการเคลื่อนย้ายหมายถึงการเพิ่ม n - 1 สมาชิกขึ้น 1
เช่น ถ้าอินพุตคือ [3,2,3,4] ผลลัพธ์คือ 4
วิธีแก้:
- n := ขนาด nums
- ถ้า n เท่ากับ 0: คืนค่า 0
- เรียงอาร์เรย์ nums
- ans := 0
- วนลูป i := 0 ถึง n - 1: ans := ans + nums[i] - nums[0]
- คืนค่า ans
ตัวอย่าง
#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