舉一反三 最長連續子串問題

2021-08-07 15:41:03 字數 1741 閱讀 8254

給定一串行,如,求其連續子串行的和能被k整除的子串行的最長長度.

注: 連續子串行,即在序列中連續訪問的數.

序列,其滿足條件的序列為,,,,故滿足條件的最長子串行為,,長度為5.

思路1: 滑動視窗的思想,遍歷全部子串行.

**如下:

//解法1:遍歷所有的子串行,滑動視窗的思想

private

static

int findlargeseq1(int a, int k) }}

if (result>=len-i)

}return result;

}

思路2: 數學思想

若(a[i]+a[i+1]+…+a[j])%k = 0.

則有 (a[0]+a[1]+….+a[j])%k = (a[0]+a[1]+…a[i-1])%k

通俗一點,就是若序列中存在被k整除的子串行,i->j,則0->j的序列mod k的結果和序列0->i-1 mod k的結果是相同的.

**:

/**解法2

* 若 (a[i]+a[i+1]+...+a[j])%5=0,

* 則有 (a[0]+a[1]+...+a[j])%k = (a[0]+a[1]+...+a[i-1])%k

* @param a 輸入序列

* @param k mod值

* @return 最大子串行長度

*/private static int findlargeseq2(int a, int k) else }}

return result;

}

求最長連續子串行的和等於k,子串行的最長長度

**:

/**

* 若 (a[i]+a[i+1]+...+a[j])=k,

* 則有 (a[0]+a[1]+...+a[j]) = (a[0]+a[1]+...+a[i-1])+k

* @param a 輸入序列

* @param k 指定值

* @return 最大子串行長度

*/private static int findlargeseq(int a, int k) }}

}return result;

}

求最長連續子串行的和最大,子串行的最長長度

**:

/**

* 若 (a[i]+a[i+1]+...+a[j])=max,

* 則有 (a[0]+a[1]+...+a[j]) = (a[0]+a[1]+...+a[i-1])+max

* @param a 輸入序列

* @return 最大子串行長度

*/private static int findlargeseq(int a)

}result = candidates.get(candidates.lastkey()) - candidates.get(candidates.firstkey());

return result;

}

注: treemap 根據key 自動公升序.

subarray with sum divisible by k

find longest subarray whose sum is divisible by k

替換空格 舉一反三

思路 在替換空格時,從後向前開始進行搬移,因為把乙個字元替換為了3個字元,所以陣列的長度會變長,替換後陣列的長度 空格的數量 2 替換之前陣列的長度,要注意記憶體覆蓋。給兩個標記,tailoldlength標記原陣列 替換之前的陣列 的最後乙個元素,tailnewlength標記新陣列 替換之後的陣...

模型實現舉一反三

在很長一段時間裡,大家都對深度學習模型有所誤解,認為模型需要非常大量的資料訓練,且只能過訓練過的模式起作用 用貓的資料訓練就只能識別貓,只有在訓練資料中多次出現的模式才能被模型學習和應用,稍有變化,模型就無法正常工作。實際上隨著深度學習模型的發展,這些問題都在逐步改善。現在很多模型學習的不僅是解決具...

最長連續子串

牛牛有兩個字串 可能包含空格 牛牛想找出其中最長的公共連續子串,希望你能幫助他,並輸出其長度。輸入描述 輸入為兩行字串 可能包含空格 長度均小於等於50.輸出描述 輸出為乙個整數,表示最長公共連續子串的長度。示例1 abcde abgde 2 這個題是一道動態規劃的變形體 就是當a i 1 b j ...