数据结构与算法 LeetCode编程练习--Search in Rotated array
来源:互联网 发布:vb程序中的对象的行为 编辑:程序博客网 时间:2024/05/16 09:07
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.
假设一个已排序的数组在一些事先不知名支点旋转。
(即,0 1 2 4 5 6 7可能成为4 5 6 7 0 1 2)。
您将得到一个目标值进行搜索。如果找到数组返回其索引,否则返回-1。
你可以假设不存在重复到数组中。
思路:首先我们分析这个数组的特点,数组中有两个数比较特别,一个是7,大于两边的值,一个是0,小于两边的值。所以我们检测的时候就要根据这些特点,进行判断。
若大于两边的值:
比较最右端的值,若目标值大于右端的值,则在左端检测。
反之,在右端。
若小于两边的值:
比较最右端的值,若目标值大于右端的值,则在左端检测。
反之,在右。
我们发现上面两种情况可以合并,但是分析的过程还是这样的。
其他情况按照正常二分法查。。。
C++代
#include <iostream>using namespace std;int Search(int a[], int f, int l, int n);int MakeSure(int a[], int f, int l, int n);int main(){ int arr[] = { 4,5,6,7,0,1,2 }; cout << Search(arr, 0, 6, 1) << endl; system("pause"); return 0;}int Search(int a[], int f, int l, int n){ int m; if (l <= f + 1) { return MakeSure(a, f, l, n); } else { m = int((f + l) / 2); if (a[m] == n) return m; else if ((a[m] < a[f]) && (a[m] < a[l])) { if (a[l] > n) return Search(a, m, l, n); else return Search(a, f, m, n); } else if ((a[m] > a[f]) && (a[m] > a[l])) { if (a[f] < n) return Search(a, f, m, n); else return Search(a, m, l, n); } else if (a[m] > n) return Search(a, f, m, n); else return Search(a, m, l, n); }}int MakeSure(int a[], int f, int l, int n){ if (a[f] == n) return f; else if (a[l] == n) return l; else return -1;}
修改:
#include <iostream>using namespace std;int Search(int a[], int f, int l, int n);int MakeSure(int a[], int f, int l, int n);int main(){ int arr[] = { 4,5,6,7,0,1,2 }; cout << Search(arr, 0, 6, 7) << endl; system("pause"); return 0;}int Search(int a[], int f, int l, int n){ int m; if (l <= f + 1) { return MakeSure(a, f, l, n); } else { m = int((f + l) / 2); if (a[m] == n) return m; else if ((a[m] < a[f]) && (a[m] < a[l])) { if ((a[l] < n) || (n < a[m])) return Search(a, f, m, n); else return Search(a, m, l, n); } else if ((a[m] > a[f]) && (a[m] > a[l])) { if ((a[f] < n) && (n < a[m])) return Search(a, f, m, n); else return Search(a, m, l, n); } else if (a[m] > n) return Search(a, f, m, n); else return Search(a, m, l, n); }}int MakeSure(int a[], int f, int l, int n){ if (a[f] == n) return f; else if (a[l] == n) return l; else return -1;}
1 0
- 数据结构与算法 LeetCode编程练习--Search in Rotated array
- 数据结构与算法 LeetCode编程练习--Search in Rotated array II
- 数据结构与算法 LeetCode编程练习--Search and Inserted in sorted array
- 【LeetCode算法练习(C++)】Search in Rotated Sorted Array
- Leetcode在线编程search-in-rotated-sorted-array
- LeetCode算法题目: Search in Rotated Sorted Array
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : 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
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- 互联网+时代对社会分工见解
- JSON语法
- 传统的MapReduce框架慢在那里
- 【程序员的梦想】:今日之梦想
- 剑指offer系列之六十:序列化二叉树
- 数据结构与算法 LeetCode编程练习--Search in Rotated array
- Palindrome Linked List
- Nginx
- 2016我来了
- Viterbi training
- Java基础--集合框架(Map集合)
- 抽象类和接口
- Towards Crazyswarms
- 第三十六课——简单文字处理