如何仅使用数组在Java中只打印一次重复的元素?
下面的代码片段仅适用于重复的数字,但我很好奇如何使用多个重复元素来解决它如何仅使用数组在Java中只打印一次重复的元素?,java,arrays,Java,Arrays,下面的代码片段仅适用于重复的数字,但我很好奇如何使用多个重复元素来解决它 输入:1,2,5,5,5,8,9,11,12,1 输出:1,5 int[] arr = {1, 2, 5, 5, 5, 8, 9, 11, 12, 1}; for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j] && i
输入:
1,2,5,5,5,8,9,11,12,1
输出:
1,5
int[] arr = {1, 2, 5, 5, 5, 8, 9, 11, 12, 1};
for (int i = 0; i < arr.length; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j] && i != j) {
System.out.print(arr[j] + " ");
}
}
}
int[]arr={1,2,5,5,8,9,11,12,1};
对于(int i=0;iint[]arr={1,2,5,5,5,8,9,11,12,1};
Map Map=newhashmap();
Arrays.stream(arr.forEach)(i->map.put(i,map.getOrDefault(i,0)+1));
map.keySet().stream().mapToInt(i->i).filter(i->map.get(i)>1)
.forEachOrdered(System.out::println);
您可以使用映射来存储频率,然后获取频率大于1
的数字。这样如何:
int[] arr = { 1, 2, 5, 5, 5, 8, 9, 11, 12, 1 };
boolean[] seen = new boolean[arr.length];
for (int i = 0; i < arr.length; i++)
{
if(seen[i]) continue;
boolean duplicate = false;
for (int j = i + 1; j < arr.length; j++)
{
if (arr[i] == arr[j])
{
duplicate = seen[j] = true;
}
}
if(duplicate)
System.out.print(arr[i] + " ");
}
可以使用集合(线性时间复杂度)一次性完成
您可以使用流API执行此操作,如下所示:
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Integer[] arr = { 1, 2, 5, 5, 5, 8, 9, 11, 12, 1 };
Stream.of(arr).distinct().filter(n -> Collections.frequency(Arrays.asList(arr), n) > 1)
.forEach(System.out::println);
}
}
输出:
1
5
这里有一个使用地图的简单方法
- 使用键的值和值的计数
- 只需计算出现次数,并仅在计数=2时打印值
@用户没有编译或执行要求的操作。为什么输出中有1
?它不会超过两次。@JanezKuhar好吧,如果forEach
拼写正确的话就会有。@HarshalParekh我编辑了我的问题,很抱歉让人困惑。谢谢你的解决方案(+1)它非常强大,但是我很好奇如何只使用数组来解决它。这个解决方案或我的解决方案实际上比两个嵌套循环要好(O(n)vs O(n^2))
。你完全正确,但我想看看如何仅使用数组来解决它,因为我在问题中拉伸了它:)
public static void getRepeatedValues(int[] values)
{
Set<Integer> set = new HashSet<>();
Set<Integer> ans = new HashSet<>();
for (int value : values)
{
if(set.contains(value))
{
ans.add(value);
} else {
set.add(value);
}
}
System.out.println(ans);
}
Input:
[1, 2, 5, 5, 5, 8, 9, 11, 12, 1]
Output:
[1, 5]
import java.util.Arrays;
import java.util.Collections;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Integer[] arr = { 1, 2, 5, 5, 5, 8, 9, 11, 12, 1 };
Stream.of(arr).distinct().filter(n -> Collections.frequency(Arrays.asList(arr), n) > 1)
.forEach(System.out::println);
}
}
1
5
int[] arr = { 1, 2, 5, 5, 5, 8, 9, 11, 12, 1 };
Map<Integer, Integer> dups = new HashMap<>();
for (int i : arr) {
if (dups.compute(i,(k,v)-> v == null ? 1 : v + 1) == 2) {
System.out.print(i + " ");
}
}
System.out.println();
5 1