LEETCODE401051. Height Checker

Posted cutter-point

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LEETCODE401051. Height Checker相关的知识,希望对你有一定的参考价值。

package y2019.Algorithm.array;

/**
 * @ProjectName: cutter-point
 * @Package: y2019.Algorithm.array
 * @ClassName: HeightChecker
 * @Author: xiaof
 * @Description: 1051. Height Checker
 * Students are asked to stand in non-decreasing order of heights for an annual photo.
 * Return the minimum number of students not standing in the right positions.
 * (This is the number of students that must move in order for all students to be standing in non-decreasing order of height.)
 * Input: [1,1,4,2,1,3]
 * Output: 3
 * Explanation:
 * Students with heights 4, 3 and the last 1 are not standing in the right positions.
 * @Date: 2019/7/3 9:19
 * @Version: 1.0
 */
public class HeightChecker 

    public int solution(int[] heights) 

        //首先排个序,然后比较一下就可以了!,来个快排吧
        int[] array = new int[heights.length];

        for(int i = 0; i < array.length; ++i) 
            array[i] = heights[i];
        

        quikSort1(array, 0, array.length);

        //比较不同的位置
        int result = 0;
        for(int j = 0; j < array.length; ++j) 
            if(array[j] != heights[j]) 
                result++;
            
        

        return result;
    

    private void quikSort1(int array[], int start, int end) 
        if(start < end) 
            int mid = this.hoarePartition(array, start, end);
            quikSort1(array, start, mid);
            quikSort1(array, mid + 1, end);
        
    

    private int hoarePartition(int[] array, int start, int end) 
        //对区间进行排序
        int midValue = array[start];
        int index1 = start, index2 = end;
        //为了避免自己重复比较
        do 
            //左边查找比mid值大的
            do 
                ++index1;
             while(index1 < end && array[index1] < midValue);

            //找到比mid小的值
            do 
                --index2;
             while(index2 > start && array[index2] > midValue);

            //交换数据
            if(index1 < index2) 
                int temp = array[index1];
                array[index1] = array[index2];
                array[index2] = temp;
            

         while(index1 < index2);

        //最后我们把坑填到中间位置,因为index1和index2错开位置了,我们交换回来
//        int temp = array[index1];
//        array[index1] = array[index2];
//        array[index2] = temp;
        //填坑
        array[start] = array[index2];
        array[index2] = midValue;

        return index2;
    

    public static void main(String args[]) 
        int A[] = 7,4,5,6,4,2,1,4,6,5,4,8,3,1,8,2,7,6,3,2;
        int A1[] = 1,1,4,2,1,3;
        int A2[] = 1,4,3,2;
        HeightChecker fuc = new HeightChecker();
        System.out.println(fuc.solution(A2));
    


 

以上是关于LEETCODE401051. Height Checker的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Daily 21

leetcode刷题62.验证回文串——Java版

LeetCode ---Longest Palindromic Substring

LeetCode Minimum Height Trees

leetcode@ [310] Minimum Height Trees

leetcode 310. Minimum Height Trees 最小高度树(中等)