【说明】为了研究生夏令营的上机考试,刷题补一补算法。此系列主要为记录个人学习,当然也希望能够帮助需要的小伙伴~
一、题目描述
学校在拍年度纪念照时,一般要求学生按照 非递减 的高度顺序排列。
请你返回至少有多少个学生没有站在正确位置数量。该人数指的是:能让所有学生以 非递减 高度排列的必要移动人数。
示例:
输入:[1,1,4,2,1,3] 输出:3 解释: 高度为 4、3 和最后一个 1 的学生,没有站在正确的位置。
提示:
1 <= heights.length <= 100
1 <= heights[i] <= 100
二、解题思路
题中要求返回没有站在正确位置的人数,其实是找原序列与按照非递减排序后的序列中,相同位置但值不同的个数。如示例
原序列 1 1 4 2 1 3
排序后 1 1 1 2 3 4
可见有三个位置的值不同,因而返回三
关于排序算法,由于提示给出数组的长度小于等于一百,本次就直接采用了冒泡排序
三、代码
int heightChecker(int* heights, int heightsSize){
int i,j,t;
int count=0;
int *p=malloc(sizeof(int)*heightsSize);
for(i=0;i<heightsSize;i++){
p[i]=heights[i];
}
for(i=0;i<heightsSize-1;i++){
for(j=0;j<heightsSize-i-1;j++){
if(p[j]>p[j+1]){
t=p[j+1];
p[j+1]=p[j];
p[j]=t;
}
}
}
for(i=0;i<heightsSize;i++){
if(p[i]!=heights[i]){
count++;
}
}
return(count);
}
leetcode