每日一算 Leetcode 1051

// C++
/* 学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。
请你返回至少有多少个学生没有站在正确位置数量。该人数指的是:能让所有学生以 非递减 高度排列的必要移动人数。
示例
输入:[1,1,4,2,1,3]
输出:3
解释:
高度为 4、3 和最后一个 1 的学生,没有站在正确的位置。
*/
// 解题思路:先复制,后排序,再对比,不同加1.可在排序上优化空间和时间。

class Solution {
public:
    int heightChecker(vector<int>& heights) {
        int count = 0;
        const int len = heights.size();
        // 拷贝heights
        vector<int> my_height = heights;
        // 利用选择排序对my_height进行排序
        for (int i = 0; i < len - 1; i++)
        {
            int minIndex = i;
            for (int j = i+1; j < len; j++)
            { 
                if (my_height[j] < my_height[minIndex])
                {
                    minIndex = j;
                }
                    
            }
            int temp = my_height[i];
            my_height[i] = my_height[minIndex];
            my_height[minIndex] = temp;
        }
        // 对比排序前和排序后不同元素的数量
        for (int i = 0; i < len; i++)
        {
            if (my_height[i] != heights[i])
                ++count;
        }
        return count;   
    }
};

经典的排序算法:
排序算法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章