java – ArrayList:查找第n次出现的Integer
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – ArrayList:查找第n次出现的Integer,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1832字,纯文字阅读大概需要3分钟。
内容图文
在ArrayList中找到第n个数字的最佳方法是什么?
我已经知道了什么?
>要查找lastIndexOf数字,List接口中有方法,它在ArrayList类中实现.
>为了找到第一次出现,有indexOf方法.
我在解决什么?
在一个问题中,有一个列表具有不同的数字,我必须返回两个数字的索引,其总和等于目标数字.
例如:列表=(1,2,1)& target = 2;
现在1 1 = 2,答案将是前1和后1的索引.
Note: I have solved this problem & I need answer to the question at
the top. 07002
我做了什么?
public static void main(String[] args)
{
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(1);
int length = list.size();
int firstIndex = list.indexOf(1) + 1;
int secondIndex = firstIndex + list.subList(firstIndex, length).indexOf(1) + 1;
System.out.println(firstIndex);
System.out.println(secondIndex);
}
解决方法:
假设你的列表不是列表,而是一个数组(一旦你完成插入这些东西,arraylist基本上就是一个数组).
假设你不想找到总和为X的前两个num的索引,而只想找到两个nums(如果有的话).
有一个简单的解决方案需要花费O(n ^ 2)的时间,你只需用它后面的所有数字迭代每个数字,并检查总和.
更好的方法是对数组进行排序(采用O(n * logn)).现在,您可以为每个数字在数组中进行二进制搜索以获得其补码,即,如果求和,则数字将导致X.这需要n(每个数字)* log n(二进制搜索其补码) .
但我们无法排序,因为我们想要索引!或者不是吗?
如果我们创建数组的副本,而不仅仅是值,则存储一对值originalPosition:
class PosAndValue {
public final int value;
public final int pos;
public PosAndValue(int v, int p) {
value = v;
pos = p;
}
}
我们现在可以通过它的值对这些PosAndValue的数组进行排序,执行刚刚提到的算法,然后检索原始位置(即索引),所有这些都是n * logn时间复杂度(和n空间复杂度).
在复杂性方面,我相当自信你不能让它“更快”.请注意,这并不意味着代码在任何情况下都会更快,而是对于足够大的输入(即“足够大的”数组),它将是!对于小输入,作为您的示例,所有这些开销实际上可能使代码更慢!
如果您知道输入的范围有限,然后对值执行布尔位图O(n),则可以使其更好,但这是一个未指定的约束!
内容总结
以上是互联网集市为您收集整理的java – ArrayList:查找第n次出现的Integer全部内容,希望文章能够帮你解决java – ArrayList:查找第n次出现的Integer所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。