牛客网 2018校招真题 腾讯 小Q的排序

Description

牛客网 2018校招真题 小Q的排序

操作一:将当前序列中前n-1个数排为升序
操作二:将当前序列中后n-1个数排为升序

Solving Ideas

aMin: 序列中的最小值
aMax: 序列中的最大值

分三种情况:

  • (1)aMin和aMax都在正确位置,即 aMin==a[0] && aMax==a[n-1]
  • (2)aMin和aMax都不在正确位置,即 aMin!=a[0] && aMax!=a[n-1]
  • (3)aMin和aMax只有一个在正确位置,即 aMin==a[0] || aMax==a[n-1]

res: 使整个序列变为升序所需要的最少操作次数

  • 对于第一种情况:如果原序列已是升序,则res=0,否则res=1
    如序列[1, 3, 4, 5, 2, 6],只需进行一次操作一或操作二即可;
    如序列[1, 2, 3, 4, 5, 6],则不需要进行任何操作。
  • 对于第二种情况:如果aMax==a[0] && aMin==a[n-1],则res=3,否则res=2
    如序列[6, 3, 5, 4, 2, 1],至少需要3次操作。
    如序列[4, 3, 1, 6, 2, 5],操作一和操作二各进行一次即可。
  • 对于第三种情况:res=1
    如序列[1, 3, 4, 6, 2, 5],进行一次操作二即可;
    如序列[4, 3, 1, 5, 2, 6],进行一次操作一即可。

Solution

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * aMin: 序列中的最小值
 * aMax: 序列中的最大值
 *
 * 分三种情况:
 * (1)aMin和aMax都在正确位置,即 aMin==a[0] && aMax==a[n-1]
 * (2)aMin和aMax都不在正确位置,即 aMin!=a[0] && aMax!=a[n-1]
 * (3)aMin和aMax只有一个在正确位置,即 aMin==a[0] || aMax==a[n-1]
 *
 * res: 使整个序列变为升序所需要的最少操作次数
 * 对于第一种情况:如果原序列已是升序,则res=0,否则res=1
 * 对于第二种情况:如果aMax==a[0] && aMin==a[n-1],则res=3,否则res=2
 * 对于第三种情况:res=1
 *
 * @author wylu
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line;
        while ((line = br.readLine()) != null) {
            int n = Integer.parseInt(line);
            int[] a = new int[n];
            String[] strs = br.readLine().split(" ");
            for (int i = 0; i < n; i++) {
                a[i] = Integer.parseInt(strs[i]);
            }

            int aMin = a[0], aMax = a[0], res;
            boolean isSorted = true;
            for (int i = 1; i < n; i++) {
                aMin = Math.min(aMin, a[i]);
                aMax = Math.max(aMax, a[i]);
                if (a[i - 1] > a[i]) isSorted = false;
            }
            if (aMin != a[0] && aMax != a[n - 1]) res = (aMax == a[0] && aMin == a[n-1]) ? 3 : 2;
            else res = isSorted ? 0 : 1;
            System.out.println(res);
        }
    }
}

你可能感兴趣的:(NowCoder)