[英]Arrays| Find repeating integers using array division?
如何使方法显示重复的数字。 似乎是一个逻辑错误正在阻止我,而且我不知道为什么代码不执行应做的事情。
public static void findRepeating(int[] arr) {
for (int i = 0; i< arr.length; i++) {
for(int d = 0; d<arr.length; d++) {
if(arr[i] / arr[d] == 1) {
System.out.println(arr[i] + " is repeating");
}
}
}
}
public static void main(String[] args) {
int[] myArray = {69, 7, 8, 9, 90, 666, 69, 420, 2};
findRepeating(myArray);
}
}
这是内部for循环中逻辑的更正和比较
public static void findRepeating(int[] arr) {
for (int i = 0; i< arr.length; i++) {
for(int d = i+1; d<arr.length; d++) { //check with next element, as u will iterate over same element if iterating from start
if(arr[i] == arr[d]) { // checking for same number, as division can give 1 in multiple case for ex 11/7 is also 1
System.out.println(arr[i] + " is repeating");
}
}
}
}
问题在于您的if条件逻辑。
if (i != d && arr[i] / arr[d] == 1 && arr[i] % arr[d] == 0)
1)您应检查是否没有被同一数组元素除。 您可以改为从i+1
而不是0
初始化d
的值。
2)除以等于1
3)模数应为0,因为除法逻辑对此逻辑还不够。 正如@Eran所说的9/8
和9/9
也会得到1,但是使用模数检查,我们可以确保我们打印出只有9
重复
public static void findRepeating(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int d = 0; d < arr.length; d++) {
if (i != d && arr[i] / arr[d] == 1 && arr[i] % arr[d] == 0) {
System.out.println(arr[i] + " is repeating");
}
}
}
}
public static void main(String[] args) {
int[] myArray = { 69, 7, 8, 9, 90, 666, 69, 420, 2 };
findRepeating(myArray);
}
您的方法已经突出了这个问题,但是当您的数组大小太大(O(n ^ 2)的时间复杂度)时,不建议一次又一次地遍历元素,而应考虑在O()中遍历数组时进行遍历n)时间为O(n)的额外空间
Set<Integer> hs = new HashSet<Integer>(); // to store elements
for (int i = 0; i< arr.length; i++) {
if(hs.contains(arr[i])) { // Checking if element is present in set or not
System.out.println(arr[i] + " is repeating");
}else {
hs.add(arr[i]);
}
}
}
您需要从第二个循环条件中排除当前的i
索引。 对于较大的优化,您可以从索引i
开始迭代第二个循环。
public static void findRepeating(int[] arr) {
if(arr.length<2) { return; } // edge case condition
for (int i = 0; i< arr.length; i++) {
for(int d = i+1; d<arr.length; d++) { // start from i+1 index
if( arr[i] == arr[d]) {
System.out.println(arr[i] + " is repeating");
}
}
}
}
现在它将打印:
69重复
否则,您将始终重复打印arr[i]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.