特么的可信考试,明明题很简单,但是自己是个撒比,条件没考虑全
思路
- 栈
代码
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* asteroidCollision(int* arr, int arrLen, int* returnSize){
int *outBuf = (int*)malloc(sizeof(int)*arrLen);
if (arrLen == 1) {
outBuf[0] = arr[0];
return 1;
}
int i = 0 ;
int l = -1;
while (i < arrLen) {
if (l < 0) {
// printf("%d %d %d \n",arrLen,l,i);
outBuf[++l] = arr[i++];
} else if (arr[i] > 0) {
outBuf[++l] = arr[i++];
} else if (arr[i] < 0) {
if (abs(outBuf[l]) > abs(arr[i]) && outBuf[l] > 0) {
i++;
} else if (abs(outBuf[l]) == abs(arr[i]) && outBuf[l] > 0) {
l--;
i++;
} else if (abs(outBuf[l]) < abs(arr[i]) && outBuf[l] > 0) {
while (l>=0 &&abs(outBuf[l]) < abs(arr[i]) && outBuf[l] > 0 ) {//特么的l判断要在前面,不然有些例子会编译报错。
l--;
}
//outBuf[++l] = arr[i++];//特么的猪脑子,还有可能遇到相等的,那还得消,再走一遍循环就行
} else {
outBuf[++l] = arr[i++];
}
}
}
* returnSize = l+1;
return outBuf;
}