每日一算 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;   
    }
};

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值