傻大方


首页 > 人文 >

Java数组索引元素下标快速高效的方法



按关键词阅读:

你第一次写的答案就是最快的!二分法,是基于有序的基础上的。
■网友
如果数组是有序的,二分法。如果是无序的,不要考虑排序,因为效率最高就是题主的做法了。当然题主还可以考虑多线程分区段。现在很少处理器不是多核的。
■网友
说明白你的数组是不是有序的啊……
■网友
你修改后的代码和你所说的解决方案不一致,依然有问题。1.ArrayList里的indexOf实现依然是遍历的,你用indexOf实际上和你for循环去找值在数组里的位置其实没差别/** * Returns the index of the first occurrence of the specified element * in this list, or -1 if this list does not contain the element. * More formally, returns the lowest index \u0026lt;tt\u0026gt;i\u0026lt;/tt\u0026gt; such that * \u0026lt;tt\u0026gt;(o==null\u0026amp;nbsp;?\u0026amp;nbsp;get(i)==null\u0026amp;nbsp;:\u0026amp;nbsp;o.equals(get(i)))\u0026lt;/tt\u0026gt;, * or -1 if there is no such index. */public int indexOf(Object o) {\tif (o == null) {\t for (int i = 0; i \u0026lt; size; i++)\t\tif (elementData=https://www.zhihu.com/api/v4/questions/40511664/=null)/t/t return i;/t} else {/t for (int i = 0; i /u0026lt; size; i++)/t/tif (o.equals(elementData))/t/t return i;/t}/treturn -1; }2.如果值在数组里不存在,你先把值加入数组,然后用了个Collections.sort().然后接着indexOf。这就导致性能实际上还不如你一次循环,仅剩的好处只是代码好看点解决方案其实就是你说的二分法,如果二分找得到下标,说明数组中存在该值,直接返回下标。二分返回-1则循环遍历。 int num = 5; int nums = new int { 1, 2, 3, 4, 6, 7, 8, 9 }; int index = Arrays.binarySearch(nums, 5); if (index /u0026gt; 0) return index; else { for (int i = 0; i /u0026lt; nums.length; i++) { if (nums /u0026gt;= num) { return index; } } } return -1;以上都基于给出的数组是有序数组。当然,如果不是有序数组,那除了循环遍历也没啥办法了。
■网友
二分确实是最快的,但是第二段代码哪里用到二分了。。后面那个sort使得整个算法复杂度大大提高
■网友
思路好像不对哦,如果indexOf的源码是for循环的话 实际上效率还是很慢,二分查找应该是最快的吧


    来源:(未知)

    【傻大方】网址:/a/2020/0603/gd512888.html

    标题:Java数组索引元素下标快速高效的方法


    上一篇:酒精对屏幕有伤害吗

    下一篇:怎样评价小米5月份发布的与Oculus合作的小米一体机


    人文

    君安养生:搬新家注意事项及禁忌,搬家先搬什么进屋最好?

    阅读(18)

    迁居第一件进门的器械可以选择米缸、被褥或者存折银行卡。米缸,寄意衣食无忧;被褥,象征生活安稳;存折银行卡,象征一路财气。在我们迁居的那一天,第一次走进新房的时刻切记,弗成以空着手进屋。手上必定要拿一些名贵的物品或者生活用品,可以选择米缸米桶...