給定一串行,如,求其連續子串行的和能被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.通俗一點,就是若序列中存在被k整除的子串行,i->j,則0->j的序列mod k的結果和序列0->i-1 mod k的結果是相同的.則有 (a[0]+a[1]+….+a[j])%k = (a[0]+a[1]+…a[i-1])%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 ...