java无序数组且相邻不相等中找到局部最小值
2022/2/28 1:24:54
本文主要是介绍java无序数组且相邻不相等中找到局部最小值,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
package com.cowain.test; /** * @Author: fxw * @Date: 2022/2/26 22:13 */ public class Code3 { //有一个数组无序 并且 相邻不相等 找到局部最小的值 public static int find(int[] array) { if (array == null || array.length == 0) { return -1; } int N = array.length; //当数组长度为1是 直接返回当前元素为最小值 if (N == 1) { return 0; } //当左边界L<L+1时 直接返回L if (array[0] < array[1]) { return 0; } //当右边界R-1<R-2时 直接返回R-1 if (array[N - 2] > array[N - 1]) { return N - 1; } //以下情况就是长度大于1并且边界条件不满足 int L = 0; int R = N - 1; //防止越界处理 L < R-1 即最后只会剩下两个数 while (L < R - 1) { int mid = (L + R) / 2; //先是二分法找到中间值 假如 中间值的左边和右边都比他大 那么直接返回中间值 if (array[mid - 1] > array[mid] && array[mid] < array[mid + 1]) { return mid; } else { //当出现else情况中时 会出现以下三种情况 // 1 array[mid-1]<array[mid]&&array[mid+1]>array[mid] // 1 array[mid-1]>array[mid]&&array[mid]>array[mid+1] // 1 array[mid-1]<array[mid]&&array[mid+1]>array[mid] if (array[mid] > array[mid - 1]) {//认为0-mid-1中必定有最小值 砍掉mid-R R = mid - 1; } else {//认为mid-mid-1中必定有最小值 砍掉L-mid L = mid + 1; } } } return array[L] > array[R] ? R : L; } //生成随机数组 无序 并且 相邻不相等 public static int[] createRandomArray(int randomIndex, int randomValue) { int[] randomArray = new int[(int) (Math.random() * randomIndex)]; if (randomArray.length > 0) {//判断长度 randomArray[0] = (int) (Math.random() * randomValue);//给第一个元素复制 for (int i = 1; i < randomArray.length; i++) { do { randomArray[i] = (int) (Math.random() * randomValue); } while (randomArray[i] == randomArray[i - 1]);//如果相邻的两个数相等 那么就重新赋值 } } return randomArray; } //编写测试验证方法 public static boolean check(int[] array, int minIndex) { if (array.length == 0 || array == null) { return minIndex == -1; //返回false } int L = minIndex - 1; int R = minIndex + 1; boolean leftBigger = L > 0 ? array[L] > array[minIndex] : true; boolean RightBigger = R < array.length ? array[R] > array[minIndex] : true; return leftBigger && RightBigger; } //打印数组函数 public static void printArray(int[] array) { for (int value : array) { System.out.print(value + ","); } System.out.println(); } public static void main(String[] args) { int maxLen = 15; int maxValue = 200; int testTime = 1000000; System.out.println("测试开始"); for (int i = 0; i < testTime; i++) { int[] arr = createRandomArray(maxLen, maxValue); int ans = find(arr); if (!check(arr, ans)) { printArray(arr); System.out.println(ans); break; } } System.out.println("测试结束"); } }
这篇关于java无序数组且相邻不相等中找到局部最小值的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南