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()UPDATE':タイプミスだったものを変更して問題を修正しました。

4

2 に答える 2

0

あなたの問題はこの行にあります:

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

変数名の直後に ++ を配置すると、Java はコマンドを実行し、変数を 1 つ増やします。したがって、この行は「temp」の元の値を使用してコマンドを実行し、1ずつインクリメントします。

やりたいことは、変数「temp」を1つ増やしてからコマンドを実行することです。これを行うには、次のように変数名の前に ++ を付ける必要があります。

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

そうすれば、Java は変数を 1 ずつインクリメントしてから残りのコマンドを実行することを認識します。

于 2015-10-23T02:39:07.540 に答える