Equal Array Elements Leetcode 솔루션으로의 최소 이동  


난이도 쉽게
자주 묻는 질문 아마존 Apple Coursera 팩트 셋 과연 JP 모건 수학공부 Microsoft Swiggy
알고리즘 코딩 가동교 인터뷰 인터뷰 준비 리트코드 LeetCodeSolutions 수학

문제 정책  

이 문제에서 우리는 정렬 정수 또한이 배열에서 특정 작업을 수행 할 수 있습니다. 한 번의 작업으로 배열의”n – 1 ″ (하나를 제외한 모든 요소) 요소를 1 씩 증가시킬 수 있습니다.

모든 배열 요소를 동일하게 만드는 데 필요한 최소 연산 수를 찾아야합니다.

Array = {1 , 2 , 3}
3
Array = {1 , 1 , 1}

 

Equal Array Elements Leetcode 솔루션으로의 최소 이동접근 (수학)  

이 문제에서 어려움은 모든 배열 요소를 동일하게하기 위해 1 씩 증가시킬 숫자 세트를 선택하는 것입니다. 하나, 배열에서 'N – 1'요소를 늘리는 것은 하나의 배열 요소를 1 씩 줄이는 것과 같습니다. 이는 모든 요소가 같을 때 어떤 값이 될지 알아 내고 싶지 않고, 이동 횟수를 찾는 데 관심이 있기 때문입니다. 자, 이것은 우리의 작업이 배열에서 정확히 하나의 요소를 1 씩 줄이는 것이므로, 배열의 모든 요소를 ​​배열에 존재하는 최소 요소로 변환해야한다는 점이 직관적입니다 (줄일 필요가 없으므로 더욱이).

Equal Array Elements Leetcode 솔루션으로 최소한의 이동을위한 구현

C ++ 프로그램

#include <bits/stdc++.h>

using namespace std;

int minMoves(vector <int> nums) {
    int mn = *min_element(nums.begin() , nums.end()) , moves = 0;
    for(int &i : nums)
        moves += i - mn;
    return moves;
}

int main() {
    vector <int> nums = {1 , 2 , 3};
    cout << minMoves(nums) << endl;
    return 0;
}

자바 프로그램

import java.lang.*;
import java.util.*;

class min_moves {
    public static void main(String args[]) {
        int[] nums = {1 , 2 , 3};
        System.out.println(minMoves(nums));
    }

    public static int minMoves(int[] nums) {
        if(nums.length == 0)
            return 0;
        int mn = nums[0];
        for(int i = 0 ; i < nums.length ; i++) {
            mn = Math.min(mn , nums[i]);
        }

        int moves = 0;
        for(int i = 0 ; i < nums.length ; i++) {
            moves += nums[i] - mn;
        }

        return moves;
    }
}
3

Equal Array Elements Leetcode 솔루션에 대한 최소 이동의 복잡성 분석

시간 복잡성

의 위에), N = 배열의 크기. 전체 배열을 한 번 횡단합니다.

참조
Monotonic Array LeetCode 솔루션

공간 복잡성 

O (1), 배열에서 일정한 메모리 공간을 사용하기 때문입니다.