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

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

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 來獲取間隙。

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)行一次迭代,它返回與您的輸出相同的輸出
添加回答
舉報(bào)