leetcode做题总结,题目Search in Rotated Sorted Array I/II 2012/03/02-12/04/09
2014-08-17 08:44
513 查看
从类似45678123这样的有序数组中寻找对应的target,思路是还是按照普通的二分查找,然后再求出中间值mid后将其转换对应到数组中的index,然后进行比较或者返回。
第二题在第一题的基础上添加了数组中可能有重复元素,问是否影响复杂度,我觉得会降低复杂度,因为对于相同长度的数组,如果有重复数,相应的二分的命中几率就会大,次数就会少。
Update 2015/08/23:下面是新的代码,注意数组判断长度是否为0和判断对象是否为空一样重要。
public int search(int[] A, int target) { if(A.length==0)return -1; if(A.length==1){ if(A[0]==target)return 0; else return -1; } int qian=1; for(int i=0;i<A.length-1;i++){ if(A[i]>A[i+1])break; qian=i+2; } int hou=A.length-qian; int i=0,j=A.length-1,chan; while(i<=j){ int mid=(i+j)/2; if(mid<hou)chan=mid+qian; else chan = mid-hou; //if(hou==0)chan=mid; if(A[chan]==target)return chan; if(A[chan]>target) j=mid-1; else i=mid+1; } return -1; }
第二题在第一题的基础上添加了数组中可能有重复元素,问是否影响复杂度,我觉得会降低复杂度,因为对于相同长度的数组,如果有重复数,相应的二分的命中几率就会大,次数就会少。
public boolean search(int[] A, int target) { if(A.length==0)return false; if(A.length==1){ if(A[0]==target)return true; else return false; } int qian=1; for(int i=0;i<A.length-1;i++){ if(A[i]>A[i+1])break; qian=i+2; } int hou=A.length-qian; int i=0,j=A.length-1,chan; while(i<=j){ int mid=(i+j)/2; if(mid<hou)chan=mid+qian; else chan = mid-hou; //if(hou==0)chan=mid; if(A[chan]==target)return true; if(A[chan]>target) j=mid-1; else i=mid+1; } return false; }
Update 2015/08/23:下面是新的代码,注意数组判断长度是否为0和判断对象是否为空一样重要。
public class Solution { /** *@param A : an integer rotated sorted array *@param target : an integer to be searched *return : an integer */ public int search(int[] A, int target) { // write your code here if(A.length==0)return -1; int i=0,j=A.length-1; int s = A[i]; int e = A[j]; while(i<=j){ int mid=(i+j)/2; if (A[mid] == target) return mid; else if (A[mid] >= A[i]){ if (target >= A[i] && target < A[mid]) j = mid - 1; else i = mid + 1; } else { if (target <= A[j] && target > A[mid]) i = mid + 1; else j = mid - 1; } } return -1; } }
public class Solution { /** * param A : an integer ratated sorted array and duplicates are allowed * param target : an integer to be search * return : a boolean */ public boolean search(int[] A, int target) { // write your code here if(A.length==0)return false; int i=0,j=A.length-1; int s = A[i]; int e = A[j]; while(i<=j){ int mid=(i+j)/2; if (A[mid] == target) return true; else if (A[mid] > A[i]){ if (A[i] <= target && target < A[mid]) j = mid - 1; else i = mid + 1; } else if (A[mid] < A[i]){ if (target <= A[j] && A[mid] < target) i = mid + 1; else j = mid - 1; } else i++; } return false; } }
相关文章推荐
- leedcode做题总结, 题目Find Minimum in Rotated Sorted Array I/II
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array II
- 【leetcode】Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- [leetcode刷题系列]Search in Rotated Sorted Array II
- Leetcode: Search in Rotated Sorted Array II
- leetcode_Search in Rotated Sorted Array II
- LeetCode : Search in Rotated Sorted Array II
- leetcode Search in Rotated Sorted Array II
- LeetCode: Search in Rotated Sorted Array II
- [leetcode] Search in Rotated Sorted Array II
- leetcode -- Search in Rotated Sorted Array II
- LeetCode: Search in Rotated Sorted Array II
- Search in Rotated Sorted Array II [LeetCode]
- LeetCode Online Judge 题目C# 练习 - Search in Rotated Sorted Array
- LeetCode-Search in Rotated Sorted Array II
- LeetCode - Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [leetcode]Search in Rotated Sorted Array II