做Leetcode题有一段时间了,但都是断断续续的,到现在才做了30题左右,感觉对自己来说还是有点难度的。希望自己能继续坚持下去,在校招前能解决超过一百题吧。
其实这些题就是用来训练你的解题思路的,做多了的话,才能在校招时面对编程题目,能立即有一个解题的流程,知道这是哪一种类型的题目,一般用什么样的套路,思路会很清晰,比如基础的字符串,数组操作会用到一些排序算法,还有一类是算法思想的题目,比如DP(动态规划),分治,回溯法,贪心等等,多练,多思考,多总结。
‘庖丁解牛,恢恢乎游刃有余’,无他,唯手熟尔!希望自己通过训练,也能在算法这一块做到手熟。。。
言归正题。
今天正好做到这道题,仔细一看竟然是今年参加的去哪儿网实习生招聘的第一道算法题,因此把他拿来记录一下。
具体信息如下:
Search in Rotated Sorted Array
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
我的方案如下:
1 class Solution { 2 public: 3 int binarySearch(int *arr,int beg,int end,int target){ 4 if (beg <= end){ 5 int mid = (beg+end)/2; 6 if (arr[mid] < target) 7 return binarySearch(arr,mid+1,end,target); 8 if (arr[mid] > target) 9 return binarySearch(arr,beg,mid-1,target); 10 if (arr[mid] == target) 11 return mid; 12 } 13 return -1; 14 } 15 16 int search(int A[], int n, int target) { 17 if (n==0) 18 return -1; 19 if (n==1) 20 if (A[0] != target) 21 return -1; 22 else 23 return 0; 24 int down = 0; 25 for (int i=1;i<n;i++) 26 if (A[i]<A[i-1]) 27 down = i; 28 int n1 = binarySearch(A,0,down-1,target); 29 int n2 = binarySearch(A,down,n-1,target); 30 if (n1 == -1) 31 if (n2 == -1) 32 return -1; 33 else 34 return n2; 35 else 36 return n1; 37 } 38 };
Ac过。