1 進入外企寫程式(這部分有點修正, 但是先拚英文)
2024年5月24日 星期五
2024新年新目標檢討
2024年4月11日 星期四
[leetcode] [KMP] KMP
ABCDABD...
ABCDABF...
簡單的說, 傳統解兩字串匹配部分
可能會來個雙迴圈, 哀個比對, 當不匹配的時候, 會將下方列再後移1位
然後不匹配再後移
然而
如果像上放已經有4個屬於匹配的字串, 她就應該直接往後移四位來匹配, 而不是只移動1位
隱藏的思維是, 當已知匹配的, 就已知完全不能匹配的部分, 而這部分應該合理的跳過
而當它既是前墜又是後墜的時候, 可能前面就都相同可以跳過
直接開始比開始不同的地方
後贅數組定義, 是整個kmp算法根基
dp[i]: the max length k s.t. s[0:k-1] = s[i-k+1:i]
[x x x] x [x x i]
中心思想, 是得到一個next數組 類似[-1, -1, 0, 1]
當該數位置對應的數字找不到匹配時, 可往前跳向下標位置再進行比對
(網路上有不同解法有跳往下標, 或是前一個下標, 會反應在j的初始值-1或是0)
public static boolean repeatedSubstringPattern(String s) {
if(s.equals(""))return false;
int len = s.length();
int[] temp = new int[len];
int[] next=getNext(temp,s, len);
// 比對表最後一欄位置不為-1 且 長度能被最大重複組除盡
if (next[len-1] != -1 && len % (len - (next[len-1]+1)) == 0) {
return true;
}
return false;
}
public static int[] getNext(int[]next, String s, int len){
// 1 初始化賦予-1值
next[0] = -1;
int j = -1;
char[] chars = s.toCharArray();
for(int i = 1; i<len; i++){
// 2 前後綴不相等時, 往前跳到指定位置再進行下迴圈(比對)
while(j>=0&&chars[i]!=chars[j+1]){
j = next[j];
}
// 3 前後綴相等, j++, 並將值放到next表中
if(chars[i]==chars[j+1]){
j++;
}
next[i]=j;
}
return next;
}
參考: https://www.youtube.com/watch?v=t6xa2p6fFS8&t=918s
2024年4月6日 星期六
[leetcode] [eazy] Q1002
public class Q1002 {
public static void main(String[] args) {
String[] words = {"bella","label","roller"};
commonChars(words);
}
public static List<String> commonChars(String[] words) {
List<String>ans = new ArrayList<>();
int[] count = new int[26];
Arrays.fill(count, Integer.MAX_VALUE);
for(String str: words){
int []cnt = new int[26];
str.chars().forEach(c->++cnt[c-'a']);
for(int i= 0; i<26; i++){
count[i] = Math.min(cnt[i], count[i]);
}
}
for(char c='a'; c<='z';c++){
while(count[c-'a']-->0){
ans.add("" + c);
}
}
return ans;
}
}
1 Arrays.fill方法沒用過, 可以用來產生空陣列
2 統計文出現次數可以用int[]count = new int[26]]
3 str.chars().forEach(c->++cnt[c-'a'])
可以用來把cnt陣列中出現的文母次數做一個統計
4 for(char c=='a';c<='z';c++){
while(count[c-'a']-->0){
ans.add(""+c);
}
}
能將陣列中出現的字母, 在轉換放進List答案中
eazy這麼難...
2024年3月22日 星期五
在分支上測試時遇到dev已經更新太多
在分支上測試時遇到dev已經更新太多
可能會導致專案已經跑不起來
不得不在分支上會需要dev更新的部分
本來預計就直接把分支併回dev做測試
而今天學到一個方法
就是在分支上pull
將dev pull近來
這樣就能解決dev已經更新很多的問題
2024年2月24日 星期六
網關 gateway
namespace: 用於區分環境, 例如 開發環境, 測試環境, 生產環境
group: 用於區分項目, 例如xuecheng-plus項目, xuecheng2.0項目
關於網關的存在,是為了解決目前遇到的問題
解決綁定絕對路徑綁死同一機台問題
如上圖為絕對路徑,在微服務架構下, 可能一個服務有多台(多實例),他服務對接並不適合綁定某一機台,應讓不同的實例都能處理此請求才是
有了網關就可以對請求進行路由,路由到具體的微服務,減少外界對接微服務的成本,比如:400電話,路由的試可以根據請求路徑進行路由、根據host地址進行路由等, 當微服務有多個實例時可以通過負載均衡算法進行路由
2024年2月8日 星期四
LeetCode策略
目前順序:
數組-> 鏈表-> 哈希表->字符串->棧與隊列->樹->回溯->貪心->動態規劃->圖論->高級數據結構
參考: https://github.com/youngyangyang04/leetcode-master/blob/master/README.md
規劃:
1 刷1題
2 隔天再刷同一題, 並寫當題的bigO, 將答案和思路貼到專案中
3 完成第二種解法
4 重寫第二種解法, 寫第二種bigO, 並將答案和思路貼到專案中, 並在excel表紀錄
excel表紀錄參考: https://www.youtube.com/watch?v=NdWYxz3izH4&t=5s
每周寫篇日誌做些調整
2024年1月15日 星期一
2024新年新目標
Aider及gemini合併使用心得
嘗試Aider SDD套用gemini 我發現ai全自動產code有一個現象, 就是我心中有一個完美的想法, ai可能基於他的背景資訊未必想得到, 也或著就是ai已經被各種知識訓練過, 他可能選擇了一種, 但是並沒有查覺到其中有什麼問題, 很多時候的solution就是想得太簡單...
-
考題: 實作一個演算法來判斷一個字串中的字元是否不重複. 如果不能使用其他資料結構怎麼辦? 思維:假設字元有128個, 每一個都有特殊的數字, 因此~ 1 造一個布林陣列 2 跑迴圈, 當遇到新的字元數字, 布林陣列[數字] 改為true 3 下一次再來, 如果發現其布林陣列[數...
-
1 多Profile文件 我們在主配置文件編寫的時候, 文件名可以是applpication-{profile}.properties/yml 默認使用application.properties的配置; 2 yml 支持多文檔塊方式 注意~這裡如果使用yml, 那applica...
-
SpiringBoot 配置文件 除了可以使用application.properties外 還可以使用application.yml 而以前的配置文件大多是使用xxxx.xml文件 YAML: 以數據為中心, 比json, xml更適合用來做配置文件 舉例: ...