剑指offer——11.旋转数组的最小数字
题目:
题1:实现快速排序
题2:年龄排序问题。
题3:旋转数组的最小数字
知识点:
- 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details/82423852
- 创建指定大小的数组(居然忘了,笨噢!):int[] timesofAge = new int [100];
- arr1 = [1,2,3,4,5,6]; 对应出现次数arr2 = [0,0,2,3,2,1],存放在另一个数组中用2次循环(1分钟内快速写出!)
注意:
- 思考要全面!!!(旋转数组的最小值中多种情况)
代码实现:
package jzoffer;import java.util.Arrays;public class Num11 {public static void main(String[] args) {// 年龄排序// int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};// ageSort(arr, arr.length);// 快速排序// quickSort(arr, 0, arr.length-1);// 旋转数组的最小数字int[] arr = { 1, 0, 1, 1, 1 };int a = findMin(arr);System.out.println(a);}// 快速排序public static void quickSort(int[] arr, int startIndex, int endIndex) {int i, j, temp, std;// 循环至i=jif (startIndex > endIndex) {return;}// 确定基准数std = arr[startIndex];i = startIndex;j = endIndex;while (i < j) {// 从右边开始遍历,找到小于基准数的while (arr[j] >= std && i < j) {j--;}// 从左边开始遍历,找到大于基准数的while (arr[i] <= std && i < j) {i++;}// 交换if (i < j) {temp = arr[j];arr[j] = arr[i];arr[i] = temp;}}// 交换基准数与arr[i]arr[startIndex] = arr[i];arr[i] = std;// 左子序列递归quickSort(arr, startIndex, i - 1);// 右子序列递归quickSort(arr, i + 1, endIndex);}// 年龄排序public static int[] ageSort(int[] arr, int length) {int index = 0;int age;int oldestAge = 99;int[] timesofAge = new int[oldestAge + 1];// 从小到大统计每个年龄出现的次数for (int i = 0; i < length; i++) {age = arr[i];timesofAge[age + 1] += 1;}// 依次放到另一个数组中for (int i = 0; i <= oldestAge; i++) {for (int j = 0; j < timesofAge[i]; j++) {arr[index] = i;index++;}}System.out.println(Arrays.toString(arr));return arr;}// 旋转数组的最小值(二分思想)public static int findMin(int[] arr) {// 创建两个指针i,j位于左右两端int index1, index2, midIndex;index1 = 0;index2 = arr.length - 1;midIndex = index1;// 递归至两指针挨着,右边的指针所指的数为最小数while (index1 < index2 - 1) {midIndex = (index1 + index2) / 2;// 若数组为排序数组本身,直接输出第一个数字if (arr[index1] < arr[index2]) {break;}// 若三个数相等,只能调用顺寻查找if (arr[index1] == arr[index2] && arr[index1] == arr[midIndex]) {return orderFind(arr);}// 正常情况,,判断数组中间的数是处在左边数列、还是右边数列if (arr[midIndex] >= arr[0]) {index1 = midIndex;} else {index2 = midIndex;}}return arr[midIndex];}public static int orderFind(int[] arr) {int result = arr[0];for (int i = 0; i < arr.length - 1; i++) {if (arr[i] < result) {result = arr[i];}}return result;}
}
剑指offer——11.旋转数组的最小数字相关推荐
- 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java
<LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...
- 剑指 Offer 11. 旋转数组的最小数字 简单
剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...
- 剑指offer 11. 旋转数组的最小数字(很详细!)
剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...
- 【LeetCode】剑指 Offer 11. 旋转数组的最小数字
[LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...
- 【剑指 Offe】剑指 Offer 11. 旋转数组的最小数字
目录标题 算法汇总 题目 关键点 代码 1.解体方法 - 二分法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码 ...
- Leetcode 剑指 Offer 11. 旋转数组的最小数字 (每日一题 20210916)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...
- 剑指 Offer 11. 旋转数组的最小数字 LCOF
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...
- 【双百解法】剑指 Offer 11. 旋转数组的最小数字
立志用最少的代码做最高效的表达 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1 ...
- leetcode剑指 Offer 11. 旋转数组的最小数字(二分查找)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...
最新文章
- 怎样查找this的指向
- websocket(二):SSM+websocket的聊天室
- Quartz定时任务学习(九)Quartz监听器
- java 圆 继承_java 类的继承(转)
- java编码问题详解
- 任何举动之前,先思考,思考,再思考
- C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
- mysql字符类型总结及常用字符函数
- 【优化求解】基于matalb遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】
- 淘宝搜索页面爬取数据
- linux系统中各颜色的代表
- 微信h5游戏如何在微信中做好域名防封 防屏蔽的 工作
- 下行控制信息 - 下行DCI
- vertica MySQL_MySQL数据库之Vertica数据库的用法
- 毕业论文找文献是个问题,我直接用python把全网文献爬了一遍,这波就很舒服
- sudo apt-get update 报错 ubuntu xenial InRelease 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)解决
- 引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍
- 九、系统的软中断导致CPU使用率升高,我该怎么办?
- 计算思维 by徐明星老师 逻辑推理、下楼、跳马、分书、八皇后、人鬼过河
- 力扣416 二维数组解法
热门文章
- 独立完成一个城市选择组件(阿里前端题目,内附知识点、思路)
- 基于springcloud的声明式客户端FeignClients方式的httpserver访问配置
- 随机森林、gbdt算法
- Jquery技巧:使用ajax技术提交表单数据
- 截取字符串--sql和access的区别
- 《设计模式详解》结构型模式 - 适配器模式
- PyQt5: This application failed to start because it could not find or load the Qt platform plugin
- 小程序入门学习19--springboot之HelloWorld
- [转]非极大值抑制(Non-Maximum Suppression)
- 设计模式13_享元模式