第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如何使用哈希圖計(jì)算數(shù)字對的絕對差?

如何使用哈希圖計(jì)算數(shù)字對的絕對差?

達(dá)令說 2024-01-17 17:05:16
我希望將整數(shù)數(shù)組轉(zhuǎn)換為鍵值對,其中每個(gè)元素都是前一個(gè)元素的值和后一個(gè)元素的鍵(第一個(gè)和最后一個(gè)元素除外)。將數(shù)組轉(zhuǎn)換為哈希圖后,我需要計(jì)算數(shù)組中整數(shù)之間的差距。我能夠轉(zhuǎn)換數(shù)組,但正在尋找更優(yōu)雅的解決方案,并且仍然需要找到間隙。public void calculateGap(int[] nums) {    int l = nums.length;    Map<Integer, Integer> dist = new HashMap<>();            for(int i=0; i<l; i++) {        if(i != l-1) {            int val = nums[i+1];            dist.put(nums[i], val);            }        if(i != 0) {            int key = nums[i-1];            dist.put(key, nums[i]);        }    }}輸入:[3,6,9,1]作為哈希圖輸入:{3:6, 6:9, 9:1}輸出:[3,3,8]
查看完整描述

4 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

問:我想知道哈希圖繞行的目的是什么,當(dāng)人們可以直接計(jì)算距離時(shí)。


public int[] calculateGap(int[] nums) {

    if (nums.length < 2) {

        throw new IllegalArgumentException();

    }


    int[] dist = new int[nums.length - 1];

    for (int i = 1; i < nums.length; i++) {

        dist[i - 1] = Math.abs(nums[i] - nums[i - 1]);

    }

    return dist;

}


查看完整回答
反對 回復(fù) 2024-01-17
?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

問:為什么不這樣做:


public static Map<Integer, Integer> calculateGap(int[] nums) {

    Map<Integer, Integer> result = new HashMap<>();

    for(int i=0; i<nums.length - 1; i++) {

          result.put(nums[i], nums[i+1);    

    }

    return result;

}    

...

public static int gap ( Map<Integer, Integer> map, int idx) throws Exception {

  if (idx < 0 || idx >= map.size()) {

     throw new Exception ("index "+ idx " exceeds list bounds 0 .." + map.size() - 1);

  }

  return Math.abs(idx - map.get(idx);

}


查看完整回答
反對 回復(fù) 2024-01-17
?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

沒有必要使用哈希圖。您可以完全跳過它,只需將計(jì)算出的間隙存儲在 int[] 或 ArrayList 中:


//using int[]

public int[] calculateGap(int[] nums) {

    int len = nums.length;

    int [] dist = new int[len-1];


    for(int i = 1; i < len; i++) {

        dist[i-1] = Math.abs(nums[i] - nums[i-1]);

    }

}


//using ArrayList

public ArrayList<Integer> calculateGap(int[] nums) {

    int len = nums.length;

    ArrayList<Integer> dist = new ArrayList<Integer>();


    for(int i = 1; i < len; i++) {

        dist.add(Math.abs(nums[i] - num[i-1]));

    }

}

但是如果你絕對想使用 Hashmap,這就是你可以在單個(gè)循環(huán)中完成它的方法:


public static ArrayList<Integer> calculateGap(int[] nums) {

    int l = nums.length;

    HashMap<Integer, Integer> dist = new HashMap<>();

    ArrayList<Integer> gaps = new ArrayList<Integer>();

    int prev = 0;


    for(int i=1; i<l;i++) {

        prev = nums[i-1];

        dist.put(prev, nums[i]);

        gaps.add(Math.abs(dist.get(prev)-prev));

    } 


    return gaps;

}

或者使用 int[] 輸出:


public static int[] calculateGap(int[] nums) {

    int l = nums.length;

    Map<Integer, Integer> dist = new HashMap<>();

    int[] gaps = new int[l-1];

    int prev = 0;


    for(int i=1; i<l;i++) {

        prev = nums[i-1];

        dist.put(prev, nums[i]);

        gaps[i-1] = (Math.abs(dist.get(prev)-prev));

    } 


    return gaps;

}

顯然,您不必使用 dist.get(prev) 因?yàn)槟梢灾皇褂?nums[i],但我假設(shè)由于某種原因您想使用 Hashmap 來獲取間隙。


查看完整回答
反對 回復(fù) 2024-01-17
?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個(gè)贊

您可以執(zhí)行此操作來填充 HashMap,因?yàn)樗恍枰厥獾倪吘壧幚恚?/p>


for(int i=1; i<l;i++)

{

    dist.put(nums[i-1], nums[1]);

但是,如果您不想將其存儲為哈希映射,則可以通過創(chuàng)建第二個(gè)名為 out put 的數(shù)組來對 dist 進(jìn)行運(yùn)行總計(jì),然后執(zhí)行以下操作:


for(int i=2; i < l; i++)

{

    output[i-2] = Math.abs(nums[i]-nums[i-1]);

}

僅對數(shù)組進(jìn)行一次迭代,它返回與您的輸出相同的輸出


查看完整回答
反對 回復(fù) 2024-01-17
  • 4 回答
  • 0 關(guān)注
  • 248 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號