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

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

從數(shù)組中找到等于某個值 X 的子數(shù)組

從數(shù)組中找到等于某個值 X 的子數(shù)組

森林海 2022-12-15 15:14:22
背景給定一個包含正數(shù)和負(fù)數(shù)的數(shù)組。您要在數(shù)組中找到一個等于某個值 X 的子數(shù)組。輸入是數(shù)組和 X 值。輸出是子數(shù)組的開始和結(jié)束索引。例子Array = [2,6,0,9,7,3,1,4,1,10] X = 15Output = [1,3]以下是我在geeks4geeks上找到的代碼  public static void subArraySum(int[] arr, int n, int sum) {         //cur_sum to keep track of cummulative sum till that point         int cur_sum = 0;         int start = 0;         int end = -1;         HashMap<Integer, Integer> hashMap = new HashMap<>();         for (int i = 0; i < n; i++) {             cur_sum = cur_sum + arr[i];             //check whether cur_sum - sum = 0, if 0 it means             //the sub array is starting from index 0- so stop             if (cur_sum - sum == 0) {                 start = 0;                 end = i;                 break;             }             //if hashMap already has the value, means we already              // have subarray with the sum - so stop             if (hashMap.containsKey(cur_sum - sum)) {                 start = hashMap.get(cur_sum - sum) + 1;                 end = i;                 break;             }             //if value is not present then add to hashmap             hashMap.put(cur_sum, i);         }         // if end is -1 : means we have reached end without the sum         if (end == -1) {             System.out.println("No subarray with given sum exists");         } else {             System.out.println("Sum found between indexes "                             + start + " to " + end); 問題 總的來說,我能夠理解為什么這個解決方案有效。具有條件的第一個塊cur_sum - sum == 0對我來說完全有意義。但是,我對hashMap.containsKey(cur_sum - sum)支票有效的原因感到非常困惑。我知道它每次都有效,但我想了解它背后的數(shù)學(xué)意義。我在一篇采訪博客中讀到,這使用了常見的差異技術(shù),但我不確定這如何適用于此。在準(zhǔn)備面試時,我并不是要記住這個解決方案,而是要對它的工作原理有一個深刻的理解。我花了幾個小時想出例子并手工追蹤它們,解決方案有效,但我無法理解為什么這種技術(shù)有效,我拒絕盲目地記住它。例如,如果我們談?wù)摰氖且粋€只有正數(shù)的數(shù)組,那么我知道可以使用“滑動窗口”技術(shù)并且我能夠完全理解。當(dāng)您擴展窗口時,總和會變大,而當(dāng)您關(guān)閉窗口時,總和會變小。上述問題并非如此,因此希望得到一些幫助。
查看完整描述

1 回答

?
SMILET

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊

sum- 是我們想要達(dá)到的數(shù)字

cur_sum- 是到目前為止數(shù)組中所有元素的總和

比如說cur_sum - sum = x

我們在開始時更新的每個步驟cur_sum,如果讓您感到困惑的條件評估為false我們更新哈希圖并繼續(xù)。

到目前為止,一切都很好。

現(xiàn)在,為什么我們要查看是否x已經(jīng)在哈希圖中?

答案是,如果有一個先前的索引i,其中直到該索引(包括)的所有元素的總和為x,這意味著從索引i+1到當(dāng)前索引,我們有一個子數(shù)組,其總和為:cur_sum - x

并且因為我們已經(jīng)知道這cur_sum - sum = x意味著從i+1當(dāng)前索引開始和結(jié)束的子數(shù)組總和恰好為sum.

讓我們以您發(fā)布的示例為例:

Array = [2,6,0,9,7,3,1,4,1,10] 
X = 15
Output = [1,3]

讓我們迭代數(shù)組:
索引 0:sum 2 => 使用 (0:2)
索引 1 更新地圖:sum 2+6=8 => 使用 (1:8)
索引 2 更新地圖:sum 2+6+0 =8 => 用 (2:8)
索引 3 更新地圖:總和 2+6+0+9=17 =>

但是現(xiàn)在我們可以看到映射已經(jīng)包含 17-15=2 (0:2) 因此我們知道從索引 1 開始的子數(shù)組的總和(索引 1 在 (0:2) 的零之后)并結(jié)束于當(dāng)前索引:3 - 這個子數(shù)組總和為 15。


查看完整回答
反對 回復(fù) 2022-12-15
  • 1 回答
  • 0 關(guān)注
  • 98 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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