博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求一个已排序旋转数组中的最小的数
阅读量:2725 次
发布时间:2019-05-13

本文共 1173 字,大约阅读时间需要 3 分钟。

描述:

给一个已经排好序的数组,然后再将他进行旋转(将前n个数搬到末尾)如数组{1,2,3,4,5}旋转为{3,4,5,1,2},求数组中的最小数字。

解法:

利用二分查找来提高查找效率。(原理:部分有序)。
代码:

特殊情况:

数组{0,1,1,1,1}变为{1,1,1,0,1}
要将这种情况考虑进去。

#define  _CRT_SECURE_NO_WARNINGS#include
using namespace std;int MinInOrder(int *arr, int left, int right){ int ret = arr[left]; for (int i = left + 1; i < right; i++) { if (ret > arr[i]) { ret = arr[i]; } } return ret;}int Min(int* arr, int len){ if (arr == NULL || len <= 0) { return -1; } int left = 0; int right = len - 1; int mid = left; while (arr[left] >= arr[right]) { if (right - left == 1)//两个挨着 { mid = right; break; } mid = (left + right) / 2; if (arr[left] == arr[right] && arr[mid]==arr[left]) { return MinInOrder(arr, left, right); } if (arr[mid] >= arr[left]) { left = mid; } else if (arr[mid] <= arr[right]) { right = mid; } } return arr[mid];}int main(){ int arr[5] = { 1,0,1,1,1}; int ret=Min(arr, 5); printf("%d", ret); system("pause"); return 0;}

转载地址:http://iqstd.baihongyu.com/

你可能感兴趣的文章
group by 与 where, having以及顺序
查看>>
XPath 详解,总结
查看>>
初学XPath,其实很简单
查看>>
要提高SQL查询效率where语句条件的先后次序应如何写
查看>>
jni数据类型及使用
查看>>
JNI对引用数据类型的操作
查看>>
JNI的NIO操作
查看>>
JNI的访问域
查看>>
JNI调用Java方法
查看>>
JNI异常处理
查看>>
JNI日志打印
查看>>
struct和class(C++和C#)区别-----剑指offer
查看>>
数据结构----哈希表
查看>>
二分查找专题
查看>>
牛客网试题+答案分析+大牛面试经验(2)
查看>>
请你讲述一下互斥锁(mutex)机制,以及互斥锁和读写锁的区别
查看>>
请你回答一下软链接和硬链接区别
查看>>
请你说一说死锁产生的必要条件?
查看>>
你都使用什么线程模型
查看>>
请你来说一说协程
查看>>