Java 大小为2N的数组中的N个重复元素
在大小为Java 大小为2N的数组中的N个重复元素,java,Java,在大小为2N的数组A中,存在N+1唯一元素,并且这些元素中正好有一个重复N次 返回重复N次的元素 我试图解决这个算法,但我似乎不明白为什么我的计数总是被重置。任何意见都将受到赞赏 public class RepeatedElementInSize2NArray { public static void main(String[] args) { int[] inputArr = new int[] {1,2,3,3}; int repeatedElem
2N
的数组A中,存在N+1
唯一元素,并且这些元素中正好有一个重复N次
返回重复N次的元素
我试图解决这个算法,但我似乎不明白为什么我的计数总是被重置。任何意见都将受到赞赏
public class RepeatedElementInSize2NArray {
public static void main(String[] args) {
int[] inputArr = new int[] {1,2,3,3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : "+repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count++);
} else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
if (repeatedElementMap.containsValue(length % 2)) {
repeatedElement = repeatedElementMap.get(length % 2);
}
return repeatedElement;
}
}
公共类RepeatedElementInSize2NArray{
公共静态void main(字符串[]args){
int[]inputArr=新的int[]{1,2,3,3};
int repeatedElement=findRepeatedElement(inputArr);
System.out.println(“重复元素:+repeatedElement”);
}
公共静态int findRepeatedElement(int[]inputArr){
Map repeatedElementMap=newhashmap();
整数计数=0;
for(int i=0;i
它应该是++count
而不是count++
行中的repeatedElementMap.put(inputArr[i],count++)代码>
原因是后者在增加值之前首先返回count的值,而前者先增加值然后返回。应该是++count
,而不是repeatedElementMap.put(inputArr[i],count++)行中的count++
代码>
原因是后者在增加值之前首先返回count的值,而前者先增加值,然后返回。问题在于行repeatedElementMap.put(inputArr[i],count++)代码>
表达式count++
将增加count的值,但返回count的旧值
因此代码repeatedElementMap.put(inputArr[i],count++)代码>也可以这样编写:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
效果是一样的,但是在第二段代码中,您清楚地看到了一个问题
解决方案:
像这样替换行:repeatedElementMap.put(inputArr[i],count+1)代码>
编辑
与评论中提到的azurefrog一样,重复元素的查找也存在另一个问题:
在最后一个if语句中,搜索包含的值,如果找到该值,则尝试获取元素。但是get方法搜索的是一个键,而不是一个值。我也不明白为什么用模2代替除以2。更好的方法是只运行条目并搜索一个具有搜索的元素数的条目,如下所示:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
for(Map.Entry:repeatedElementMap.entrySet()){
if(entry.getValue()==length/2){
repeatedElement=entry.getKey();
}
}
因此,完整的工作代码如下所示:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
import java.util.HashMap;
导入java.util.Map;
公开课考试{
公共静态void main(字符串[]args){
int[]inputArr=新的int[]{1,2,3,3};
int repeatedElement=findRepeatedElement(inputArr);
System.out.println(“重复元素:+repeatedElement”);
}
公共静态int findRepeatedElement(int[]inputArr){
Map repeatedElementMap=newhashmap();
整数计数=0;
for(int i=0;i问题出在行repeatedElementMap.put(inputArr[i],count++)代码>
表达式count++
将增加count的值,但返回count的旧值
因此代码repeatedElementMap.put(inputArr[i],count++)代码>也可以这样编写:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
效果是一样的,但是在第二段代码中,您清楚地看到了一个问题
解决方案:
像这样替换行:repeatedElementMap.put(inputArr[i],count+1)代码>
编辑
与评论中提到的azurefrog一样,重复元素的查找也存在另一个问题:
在最后一个if语句中,搜索包含的值,如果找到该值,则尝试获取元素。但是get方法搜索的是一个键,而不是一个值。我也不明白为什么用模2代替除以2。更好的方法是只运行条目并搜索一个具有搜索的元素数的条目,如下所示:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
for(Map.Entry:repeatedElementMap.entrySet()){
if(entry.getValue()==length/2){
repeatedElement=entry.getKey();
}
}
因此,完整的工作代码如下所示:
repeatedElementMap.put(inputArr[i], count);
count += 1;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
import java.util.HashMap;
import java.util.Map;
public class test {
public static void main(String[] args) {
int[] inputArr = new int[] {1, 2, 3, 3};
int repeatedElement = findRepeatedElement(inputArr);
System.out.println("Repeated element : " + repeatedElement);
}
public static int findRepeatedElement(int[] inputArr) {
Map<Integer, Integer> repeatedElementMap = new HashMap<Integer, Integer>();
int count = 0;
for (int i = 0; i < inputArr.length; i++) {
if (repeatedElementMap.containsKey(inputArr[i])) {
count = repeatedElementMap.get(inputArr[i]);
repeatedElementMap.put(inputArr[i], count+1);
}
else {
repeatedElementMap.put(inputArr[i], 1);
}
}
int length = inputArr.length;
int repeatedElement = 0;
for (Map.Entry<Integer, Integer> entry : repeatedElementMap.entrySet()) {
if (entry.getValue() == length / 2) {
repeatedElement = entry.getKey();
}
}
return repeatedElement;
}
}
import java.util.HashMap;
导入java.util.Map;
公开课考试{
公共静态void main(字符串[]args){
int[]inputArr=新的int[]{1,2,3,3};
int repeatedElement=findRepeatedElement(inputArr);
System.out.println(“重复元素:+repeatedElement”);
}