Find the maximum element in an array which is first increasing and then decreasing

本文介绍了两种在数组中查找最大元素的方法:线性搜索和二分搜索。线性搜索通过遍历数组来确定最大值,而二分搜索则利用了数组排序的特点进行更高效的查找。

Examples :

Input: arr[] = {1, 3, 50, 10, 9, 7, 6}
Output: 50
Method 1 (Linear Search)
public class FindMaximum {
    static int findMaximum(int arr[], int low, int high) {
        int max = arr[low];
        int i;
        for (i = low; i <= high; i++) {
            if (arr[i] > max)
                max = arr[i];
        }
        return max;
    }

    public static void main(String[] args) {
        int arr[] = {1, 30, 40, 50, 60, 70, 23, 20};
        int n = arr.length;
        System.out.println("The maximum element is " + findMaximum(arr, 0, n - 1));
    }
} 

Output:

The maximum element is 70
Method 2 (Binary Search)
public class FindMaximum {
    static int findMaximum(int arr[], int low, int high) { 
       
       /* Base Case: Only one element is  
          present in arr[low..high]*/
        if (low == high)
            return arr[low]; 
       
       /* If there are two elements and  
          first is greater then the first  
          element is maximum */
        if ((high == low + 1) && arr[low] >= arr[high])
            return arr[low]; 
       
       /* If there are two elements and  
          second is greater then the second  
          element is maximum */
        if ((high == low + 1) && arr[low] < arr[high])
            return arr[high];

        /*low + (high - low)/2;*/
        int mid = (low + high) / 2;    
       
       /* If we reach a point where arr[mid]  
          is greater than both of its adjacent  
          elements arr[mid-1] and arr[mid+1],  
          then arr[mid] is the maximum element*/
        if (arr[mid] > arr[mid + 1] && arr[mid] > arr[mid - 1])
            return arr[mid]; 
       
       /* If arr[mid] is greater than the next  
          element and smaller than the previous  
          element then maximum lies on left side  
          of mid */
        if (arr[mid] > arr[mid + 1] && arr[mid] < arr[mid - 1])
            return findMaximum(arr, low, mid - 1);
        else
            return findMaximum(arr, mid + 1, high);
    }

    // main function 
    public static void main(String[] args) {
        int arr[] = {1, 3, 50, 10, 9, 7, 6};
        int n = arr.length;
        System.out.println("The maximum element is " + findMaximum(arr, 0, n - 1));
    }
} 

Output:

The maximum element is 50
【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)内容概要:本文介绍了基于蒙特卡洛和拉格朗日方法的电动汽车充电站有序充电调度优化方案,重点在于采用分散式优化策略应对分时电价机制下的充电需求管理。通过构建数学模型,结合不确定性因素如用户充电行为和电网负荷波动,利用蒙特卡洛模拟生成大量场景,并运用拉格朗日松弛法对复杂问题进行分解求解,从而实现全局最优或近似最优的充电调度计划。该方法有效降低了电网峰值负荷压力,提升了充电站运营效率与经济效益,同时兼顾用户充电便利性。 适合人群:具备一定电力系统、优化算法和Matlab编程基础的高校研究生、科研人员及从事智能电网、电动汽车相关领域的工程技术人员。 使用场景及目标:①应用于电动汽车充电站的日常运营管理,优化充电负荷分布;②服务于城市智能交通系统规划,提升电网与交通系统的协同水平;③作为学术研究案例,用于验证分散式优化算法在复杂能源系统中的有效性。 阅读建议:建议读者结合Matlab代码实现部分,深入理解蒙特卡洛模拟与拉格朗日松弛法的具体实施步骤,重点关注场景生成、约束处理与迭代收敛过程,以便在实际项目中灵活应用与改进。
在处理 Microsoft Office 文件(如 Excel、Word)时,Apache POI 是一个广泛使用的 Java 库。在某些情况下,用户可能会遇到文件未损坏、也并非大文件的情况下,POI 无法正常处理的问题。这种情况下,如果确认是由于 POI 的限制或缺陷导致,可以考虑向 Apache Bugzilla 提交问题请求,以推动相关功能的改进或限制的放宽。 ### 问题背景 Apache POI 提供了对 Excel 文件的读写支持,其中 `HSSF`(处理 `.xls` 格式)和 `XSSF`(处理 `.xlsx` 格式)是最常用的组件。某些情况下,即使文件未损坏,POI 也可能在解析或处理过程中抛出异常,例如: - 抛出 `InvalidFormatException` 或 `IOException`,提示文件损坏,而实际上文件可以正常在 Excel 中打开。 - 在读取大型公式、图表、样式表时出现解析错误。 - 对某些非标准但合法的文件结构支持不足。 这些问题可能并不涉及文件大小,而是由于 POI 对文件格式解析的局限性所致 [^1]。 ### Bugzilla 提交流程 如果确认问题是由于 POI 的限制导致,并且影响到正常使用,可以提交 Apache Bugzilla 请求来推动改进。提交 Bugzilla 请求时,应提供以下信息: - **问题描述**:详细描述所遇到的问题,包括异常堆栈信息。 - **复现步骤**:提供如何复现该问题的步骤。 - **预期行为**:说明期望的行为。 - **实际行为**:描述实际发生的行为。 - **附件**:上传出现问题的文件样本(如文件涉及隐私,可进行脱敏处理)。 - **环境信息**:包括 POI 版本、Java 版本、操作系统等。 提交地址为 [https://bz.apache.org/bugzilla/](https://bz.apache.org/bugzilla/),选择组件为 Apache POI 相关模块。 ### 示例代码:检测文件是否可被 POI 正确读取 以下是一个简单的代码示例,用于测试 Excel 文件是否能被 Apache POI 正确打开: ```java import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import java.io.File; import java.io.IOException; public class PoiTest { public static void main(String[] args) { try { File file = new File("test.xlsx"); Workbook workbook = WorkbookFactory.create(file); System.out.println("成功打开文件,Sheet 数量:" + workbook.getNumberOfSheets()); } catch (IOException e) { System.err.println("无法打开文件,请检查是否为 POI 支持的格式"); e.printStackTrace(); } } } ``` 如果上述代码运行失败,而文件在 Excel 中可以正常打开,则可能是 POI 的解析问题,适合提交 Bugzilla 请求。 ### 建议 - 在提交请求前,建议先在 Apache POI 的邮件列表或 GitHub Issues 中搜索类似问题。 - 如果问题已被报告,可以参与讨论或提供更多信息以协助修复。 - 可尝试使用 `SAX` 模式读取 `.xlsx` 文件(即 `XSSF` 和 `SAX` 结合),以降低内存占用并提高兼容性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值