【leetcode 刷题日记-数组-高度检查器】

**【leetcode 刷题日记-数组-高度检查器】

学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。

请你返回能让所有学生以 非递减 高度排列的最小必要移动人数。

注意,当一组学生被选中时,他们之间可以以任何可能的方式重新排序,而未被选中的学生应该保持不动。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/height-checker
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

我的解法:

int heightChecker(int* heights, int heightsSize){
    int copy[heightsSize];
    for(int i = 0; i < heightsSize; i++){
        copy[i] = heights[i];
    }

    for(int i = 0; i < heightsSize; i++){
        for(int j = i+1 ; j < heightsSize; j++){
            if(heights[i] > heights[j]){
                int temp = heights[i];
                heights[i] = heights[j];
                heights[j] = temp;
            }
        }
    }

    int count = 0;
    for(int i = 0; i< heightsSize; i++){
        if(copy[i] != heights[i]){
            count ++;
        }
    }

    return count;


}

**思路:**复制数组->排序->比较两数组的不同(两数组有几个位置上的数不一样,就输出几)

运行时间:4ms
占用内存:5.4MB

网上的优质解法:
在这里插入图片描述

// less sort
int cmp(const void*a, const void* b) {

return *(int*)a -* (int*)b;

}
int heightChecker(int* heights, int heightsSize){

    if(heights==NULL|heightsSize==0) return 0;

    int* tmp = (int*)malloc(sizeof(int)*heightsSize);
    for(int i=0;i<heightsSize;i++) {
        tmp[i] = heights[i];
    }
    
    // qsort
    qsort(heights, heightsSize, sizeof(int), cmp);
    int cnt =0;
    for(int i=0;i<heightsSize;i++) {
        if(tmp[i] != heights[i])  cnt++;
    }    
    return cnt;
    
}

总结
网上这例时间上优于我的解法的原因在于它使用了一个qsort函数把数组直接按照从小到大排序,而我们原本的解法排序这块是用了两次循环,时间复杂度上肯定不理想。
附上qsort函数的用法:
[添加链接描述](https://blog.csdn.net/xyqqwer/article/details/80158267?
来自博主:&代码收割机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值