LeetCode刷题笔记-34.在排序数组中查找元素的第一个和最后一个位置 C代码注意点结果 题目 C代码 /** * Note: The returned array must be malloced, assume caller calls free(). */ int* searchRange(int* nums, int numsSize, int target, int* returnSize){ int s, e; int *ret = NULL; ret = calloc(2, sizeof(int)); ret[0] = -1; ret[1] = -1; *returnSize = 2; if (numsSize < 1) { return ret; } if (numsSize == 1) { if (nums[0] == target) { ret[0] = 0; ret[1] = 0; return ret; } } s = 0; e = numsSize - 1; while ( s <= e ) { if (nums[s] < target) { s++; } else if (nums[s] == target) { ret[0] = s; } if (nums[e] > target) { e--; } else if (nums[e] == target) { ret[1] = e; } if (ret[0] != -1 && ret[1] != -1) { break; } } do { if (ret[0] == -1 && ret[1] == -1) break; if (ret[0] == -1) { ret[0] = ret[1]; break; } if (ret[1] == -1) { ret[1] = ret[0]; break; } break; } while(1); return ret; } 注意点 考虑数组长度为1的情况,s初始化为0,e初始化为0;考虑s和e的操作的先后顺序,需要先判断当前两个点的位置上的值后,再进行移位操作;循环的条件需要改成while(s<=e)比while(s<e)更加的方便处理; 结果 题目