如果键已经存在,则增加哈希映射值
Increasing the hashmap value if the key already exists
我不确定为什么当代码已经存在时我的代码中的值没有增加。非常感谢任何提示:
import java.util.HashMap;
public class MajorityElement {
public int majorityElement(int[] nums) {
int halfSize = nums.length/2;
int temp=0;
int majorityValue=0;
HashMap<Integer, Integer> valuesMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (valuesMap.containsValue(nums[i])) {
temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], temp++);
} else {
valuesMap.put(nums[i], 1);
}
}
for (Integer key : valuesMap.keySet()){
if (valuesMap.get(key)>= halfSize){
majorityValue=key;
}
}
return majorityValue;
}
public static void main(String[] argc){
MajorityElement majority=new MajorityElement();
int[] sampleArray={1,4,6,8,8,9,8,8,0,8};
int majorityRes=majority.majorityElement(sampleArray);
System.out.println("majority value is = [" + majorityRes + "]");
return;
}
}
更新:我将代码更改为
for (int i = 0; i < nums.length; i++) {
if (valuesMap.containsValue(nums[i])) {
// temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], valuesMap.get(nums[i])+1);
} else {
valuesMap.put(nums[i], 1);
}
}
并且它仍然为 majorityRes
打印 0。知道这是为什么吗?
更新':通过更改为拼写错误的 containsKey()
解决了问题。
temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], temp++);
temp 在该行之后增加,因此它作为旧值被放入地图中。
将其更改为:
temp=valuesMap.get(nums[i]);
temp++;
valuesMap.put(nums[i], temp);
您的问题在这一行:
valuesMap.put(nums[i], temp++);
当++直接放在变量名之后时,Java执行命令然后将变量加一。因此,这一行使用 "temp" 的原始值来执行命令,然后 然后 它递增 1。
您要做的是将变量 "temp" 递增 1,然后 然后 执行命令。为此,您需要将 ++ 放在变量名之前,如下所示:
valuesMap.put(nums[i], ++temp);
这样 Java 知道将变量递增 1,然后 然后 执行命令的其余部分。
我不确定为什么当代码已经存在时我的代码中的值没有增加。非常感谢任何提示:
import java.util.HashMap;
public class MajorityElement {
public int majorityElement(int[] nums) {
int halfSize = nums.length/2;
int temp=0;
int majorityValue=0;
HashMap<Integer, Integer> valuesMap = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if (valuesMap.containsValue(nums[i])) {
temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], temp++);
} else {
valuesMap.put(nums[i], 1);
}
}
for (Integer key : valuesMap.keySet()){
if (valuesMap.get(key)>= halfSize){
majorityValue=key;
}
}
return majorityValue;
}
public static void main(String[] argc){
MajorityElement majority=new MajorityElement();
int[] sampleArray={1,4,6,8,8,9,8,8,0,8};
int majorityRes=majority.majorityElement(sampleArray);
System.out.println("majority value is = [" + majorityRes + "]");
return;
}
}
更新:我将代码更改为
for (int i = 0; i < nums.length; i++) {
if (valuesMap.containsValue(nums[i])) {
// temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], valuesMap.get(nums[i])+1);
} else {
valuesMap.put(nums[i], 1);
}
}
并且它仍然为 majorityRes
打印 0。知道这是为什么吗?
更新':通过更改为拼写错误的 containsKey()
解决了问题。
temp=valuesMap.get(nums[i]);
valuesMap.put(nums[i], temp++);
temp 在该行之后增加,因此它作为旧值被放入地图中。
将其更改为:
temp=valuesMap.get(nums[i]);
temp++;
valuesMap.put(nums[i], temp);
您的问题在这一行:
valuesMap.put(nums[i], temp++);
当++直接放在变量名之后时,Java执行命令然后将变量加一。因此,这一行使用 "temp" 的原始值来执行命令,然后 然后 它递增 1。
您要做的是将变量 "temp" 递增 1,然后 然后 执行命令。为此,您需要将 ++ 放在变量名之前,如下所示:
valuesMap.put(nums[i], ++temp);
这样 Java 知道将变量递增 1,然后 然后 执行命令的其余部分。