0

我不确定为什么当代码已经存在时我的代码中的值没有增加。任何提示都非常感谢:

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);
            }
        }

仍然打印 0 为majorityRes. 知道为什么吗?

更新':通过更改为containsKey()拼写错误来解决问题。

4

2 回答 2

1
 temp=valuesMap.get(nums[i]);
 valuesMap.put(nums[i], temp++);

temp 在该行之后被添加,因此它被放置到地图中作为旧值。

将其更改为:

 temp=valuesMap.get(nums[i]);
temp++;
 valuesMap.put(nums[i], temp);
于 2015-10-23T02:33:23.550 回答
0

您的问题出在这一行:

                valuesMap.put(nums[i], temp++);

当 ++ 直接放在变量名之后时,Java 会执行命令,然后将变量加一。所以,这一行使用“temp”的原始值来执行命令,然后它加一。

您要做的是将变量“temp”加一,然后执行命令。为此,您需要将 ++ 放在变量名之前,如下所示:

                valuesMap.put(nums[i], ++temp);

这样,Java 就知道将变量加一,然后执行命令的其余部分。

于 2015-10-23T02:39:07.540 回答