【阿里云在线编程】 86.完美排列

题目

题目传送门:传送门(点击此处)
【阿里云在线编程】 86.完美排列_第1张图片

题解

思路

  1. 简化题目,给一个长度为n的数组,每次只能对其中的某一个元素进行加一或者减一的操作,问最后要操作多少次
  2. 形象一点,也就是这样:
    【阿里云在线编程】 86.完美排列_第2张图片
  3. 所以说先按顺序排好,再挨个进行比对就可以了
    【阿里云在线编程】 86.完美排列_第3张图片

code

package solution86;

import java.util.Arrays;

class Solution {
    public int solution(int n, int[] a) {
        int res = 0;
        Arrays.sort(a);
        for (int i = 1; i <= n; i++) {
            if (a[i - 1] > i) res = res + a[i - 1] - i;
            else res = res + i - a[i - 1];
        }
        return res;
    }
}

你可能感兴趣的:(阿里云在线编程记录)