题目:

题1:实现快速排序

题2:年龄排序问题。

题3:旋转数组的最小数字

知识点:

  1. 快速排序算法,参考:https://blog.csdn.net/shujuelin/article/details/82423852
  2. 创建指定大小的数组(居然忘了,笨噢!):int[] timesofAge = new int [100];
  3. arr1 = [1,2,3,4,5,6]; 对应出现次数arr2 = [0,0,2,3,2,1],存放在另一个数组中用2次循环(1分钟内快速写出!)

注意:

  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.旋转数组的最小数字相关推荐

  1. 《LeetCode力扣练习》剑指 Offer 11. 旋转数组的最小数字 Java

    <LeetCode力扣练习>剑指 Offer 11. 旋转数组的最小数字 Java 一.资源 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 ...

  2. 剑指 Offer 11. 旋转数组的最小数字 简单

    剑指 Offer 11. 旋转数组的最小数字 题目 解题思路 方法(一)直接遍历法 方法(二)二分查找法 题目 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组 ...

  3. 剑指offer 11. 旋转数组的最小数字(很详细!)

    剑指offer 11. 旋转数组的最小数字 题目 解题思路 代码 题目 解题思路 一开始,我们就能直接想到,数组找最小值,那么不轻轻松松直接遍历一遍,用一个变量记录最小值,然后直接返回不就完事了? 但 ...

  4. 【LeetCode】剑指 Offer 11. 旋转数组的最小数字

    [LeetCode]剑指 Offer 11. 旋转数组的最小数字 文章目录 [LeetCode]剑指 Offer 11. 旋转数组的最小数字 一.遍历 二.二分法 总结 一.遍历 算法步骤: 遍历数组 ...

  5. 【剑指 Offe】剑指 Offer 11. 旋转数组的最小数字

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 - 二分法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码 ...

  6. Leetcode 剑指 Offer 11. 旋转数组的最小数字 (每日一题 20210916)

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...

  7. 剑指 Offer 11. 旋转数组的最小数字 LCOF

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...

  8. 【双百解法】剑指 Offer 11. 旋转数组的最小数字

    立志用最少的代码做最高效的表达 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1 ...

  9. leetcode剑指 Offer 11. 旋转数组的最小数字(二分查找)

    把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转, ...

最新文章

  1. 怎样查找this的指向
  2. websocket(二):SSM+websocket的聊天室
  3. Quartz定时任务学习(九)Quartz监听器
  4. java 圆 继承_java 类的继承(转)
  5. java编码问题详解
  6. 任何举动之前,先思考,思考,再思考
  7. C++函数参数是结构体或者数组(cstdarg/.../va_arg/va_end)
  8. mysql字符类型总结及常用字符函数
  9. 【优化求解】基于matalb遗传算法求解岛屿物资补给优化问题【含Matlab源码 172期】
  10. 淘宝搜索页面爬取数据
  11. linux系统中各颜色的代表
  12. 微信h5游戏如何在微信中做好域名防封 防屏蔽的 工作
  13. 下行控制信息 - 下行DCI
  14. vertica MySQL_MySQL数据库之Vertica数据库的用法
  15. 毕业论文找文献是个问题,我直接用python把全网文献爬了一遍,这波就很舒服
  16. sudo apt-get update 报错 ubuntu xenial InRelease 明文签署文件不可用,结果为‘NOSPLIT’(您的网络需要认证吗?)解决
  17. 引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍
  18. 九、系统的软中断导致CPU使用率升高,我该怎么办?
  19. 计算思维 by徐明星老师 逻辑推理、下楼、跳马、分书、八皇后、人鬼过河
  20. 力扣416 二维数组解法

热门文章

  1. 独立完成一个城市选择组件(阿里前端题目,内附知识点、思路)
  2. 基于springcloud的声明式客户端FeignClients方式的httpserver访问配置
  3. 随机森林、gbdt算法
  4. Jquery技巧:使用ajax技术提交表单数据
  5. 截取字符串--sql和access的区别
  6. 《设计模式详解》结构型模式 - 适配器模式
  7. PyQt5: This application failed to start because it could not find or load the Qt platform plugin
  8. 小程序入门学习19--springboot之HelloWorld
  9. [转]非极大值抑制(Non-Maximum Suppression)
  10. 设计模式13_享元模式