[关闭]
@snuffles 2015-04-04T19:39:43.000000Z 字数 1608 阅读 844

Search for a Range

leetcode


20150404
4.long time no see 终于AC了我的亲娘啊,但是为何第一行行一定要放在函数外面才能AC??
20150309
1.我的亲娘啊,必须把VS2010重装了,太费劲了配置link,用gcc写makefile的日子真是美好啊
2.一开始没有用ide调试起来好痛苦
3.测试用例想不明白是怎么输出错的

  1. int b[2]={-1,-1};//
  2. int *searchRange(int A[], int n, int target) {
  3. int flag=0;
  4. int start=0,end=0;
  5. int pos=0;
  6. for(pos=0;pos<n;pos++){
  7. if(A[pos]==target){
  8. flag=1;
  9. start=pos;
  10. break;
  11. }
  12. }
  13. if(flag==1){
  14. for(pos=n-1;pos>=0;pos--){
  15. if(A[pos]==target){
  16. end=pos;
  17. b[0]=start;
  18. b[1]=end;
  19. return b;
  20. }
  21. }
  22. }
  23. b[0]=-1;
  24. b[1]=-1;
  25. return b;
  26. }

wrong answer1

Input: [2,2], 1
Output: [0,0]
Expected: [-1,-1]

  1. int b[2]={-1,-1};
  2. int *searchRange(int A[], int n, int target) {
  3. int flag=0;
  4. int start,end;
  5. for(int pos=0;pos<=n-1;pos++){
  6. if(flag==0 && A[pos]==target){
  7. flag=1;
  8. start=pos;
  9. }
  10. if(flag==1 && (pos+1)==n)
  11. {
  12. b[0]=start;
  13. b[1]=n-1;
  14. return b;
  15. }
  16. if(flag==1 && A[pos]==!target){
  17. end=pos;
  18. b[0]=start;
  19. b[1]=end;
  20. return b;
  21. }
  22. }
  23. return b;
  24. }

开始想时间上有要求是不是要用二分(请跟我唱~这就是傻~分明写不清楚~)WA2

  1. int b[2]={0,0};
  2. int half(int start,int end)
  3. {
  4. int n=start+end;
  5. if(n%2==0) return n/2;
  6. else return (n+1)/2;
  7. }
  8. int *searchRange(int A[], int n, int target) {
  9. int start=0;
  10. int end=n-1;
  11. int pos=0;
  12. if (target<A[0]||target>A[n-1]){
  13. b[0]=-1;
  14. b[1]=-1;
  15. return b;
  16. }
  17. for(;;){
  18. if(start==end||A[start]==target){
  19. b[0]=start;
  20. b[1]=end;
  21. return b;
  22. }
  23. pos=half(start,end);
  24. if(A[pos]<target) start=pos+1;
  25. if(A[pos]>target) end=pos-1;
  26. if(A[pos]==target){
  27. if(pos+1<n && A[pos+1]==target){
  28. start=pos;
  29. for(;pos!=end;end--){
  30. if(A[end]==target){
  31. b[0]=start;
  32. b[1]=end;
  33. return b;
  34. }
  35. }
  36. }
  37. if(pos-1>=0 && A[pos-1]==target){
  38. end=pos;
  39. for(;pos!=start;start++){
  40. if(A[start]==target){
  41. b[0]=start;
  42. b[1]=end;
  43. return b;
  44. }
  45. }
  46. }
  47. else{
  48. b[0]=pos;
  49. b[1]=pos;
  50. return b;
  51. }
  52. }
  53. }
  54. b[0]=-1;
  55. b[1]=-1;
  56. return b;
  57. }
  58. int main()
  59. {
  60. int A[1]={1};
  61. int n=1;
  62. int target=1;
  63. searchRange(A,n,target);
  64. cout<<b[0]<<endl;
  65. cout<<b[1]<<endl;
  66. return 0;
  67. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注