本篇文章总结了LeetCode 75题的解题过程中遇到的问题,主要包括:函数内使用sizeof( 数组指针形参 )来计算数组大小错误的问题、
75. 颜色分类(荷兰国旗问题)
题目类型
排序
做题总结
- 使用插入排序时遇到的问题。
注意这里用到的void InsertSort( int *a, int n ) { int n = sizeof(a) / sizeof(int); int p, i, tmp; for( p = 1; p < n; ++p ) { tmp = a[p]; for( i = p; i > 0 && a[i - 1] > tmp; --i ) { a[i] = a[i - 1]; } a[i] = tmp; } }
int n = sizeof(a) / sizeof(int);
,这样使用时,无法得到正确的数组大小,可能是因为在数组名a传递给函数后,函数只将其认为是一个普通指针,并不知道其是否是一个数组或数组有多少个元素;在如下使用方式下,才能够得到数组的正确大小:int main() { int nums[] = { 1, 3, 2, 4, 5 }; int n = sizeof(nums) / sizeof(int); }
- 本题使用的三指针法其逻辑不容易理解,需要仔细考虑多种情况
- 本题也可以使用排序的方法,也可以用官方提示的数0、1、2的个数然后重新构造数组。