算法题:有序数组中找到小于指定数值的最左的位置
public static void main(String[] args) { for (int i = 0; i < 10; i++) { test(); } } private static void test() { // 1、获取一个有序数组 int i = ThreadLocalRandom.current().nextInt(100); int[] ints = ArraysUtils.getInts(); Arrays.sort(ints); System.out.println("需要查找的数" + i); System.out.println(Arrays.toString(ints)); // 2、定义左右边界 int left = 0; int right = ints.length - 1; Integer result = null; // 3、定义终止条件 while (left <= right) { // 3.1 二分取中间值 int middle = (left + right) >> 1; int tmp = ints[middle]; // 3.2 根据二分的中间值来分支,等于则找到,中间值大于查找值,则将范围往左移,剔除中间值这个位置;中间值小于查找值,则剔除中间值位置后往右切割 if (tmp > i) { // -1是剔除中间值,由于是把右边界左移,所以是-1 right = middle - 1; } else { // +1是剔除中间值,由于是把左边界右移,所以是+1 left = middle + 1; result = middle; } } if (result == null) { System.out.println("没找着"); } else { System.out.println("最左索引值" + result); } }
与二分查找到指定值相比,这边的终止条件是二分到不能二分为止;然后最终取值是满足条件时候保存的索引值,这个值在每次中间值小于等于指定值的时候暂存的,每次满足条件的时候都会被替换。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探