復盤|第332場周賽
找出數(shù)組的串聯(lián)值
【雙指針 + 模擬】用數(shù)位的寫法,O(1)空間。用i、j兩個指針。
統(tǒng)計公平數(shù)對的數(shù)目
【二分】lower ≤ nums[i] + nums[j] ≤ upper,同時減 nums[j], lower - nums[j] ≤ nums[i] ≤ upper - nums[j],如果數(shù)組是有序的,則可以二分,對于每個nums[j],答案加上[lower - nums[j], upper-nums[j]] 這個范圍的數(shù)字數(shù)量。(≤ upper - nums[j]的個數(shù)是>upper - nums[j]的第一個數(shù)的下標;<lower - nums[j]的數(shù)的個數(shù)是≥lower - nums[j的第一個數(shù)的下標])
子字符串異或查詢
【預處理 + 枚舉】題中val ^ first_i = second_i,兩邊^(qū)first_i得到val ^ first ^ first= second ^ first,題意就是找每個詢問有多少個val = first ^ second。題中范圍0≤first_i, second_i≤1e9,所以first_i^second_i<2**30??梢灶A處理是所有長度不超過30的字串,可以用哈希表記錄每個二進制數(shù)對應的left和right。二進制的01拼接可以“×2+”,如10B = 1B × 2; ord(s[r]) - ord('0')相當于ord(s[r]) & 1)。[時間復雜度O(30n+q)]
最少得分子序列
【前后綴分解 + 雙指針】刪的越多剩下的越可能是s的子序列,所以就考慮刪t的字串。刪完字串后,剩下的部分是t的一個前綴和后綴。假設前綴匹配的是s的前綴s[:i],后綴匹配的是s的一個后綴s[i:](子序列匹配),則可以枚舉i,分別計算能夠與s[:i]和s[i:]匹配的t的最長前綴和最長后綴,要刪除字串的最小值 = min(s[:i]對應的 t 的最長前綴的結束下標 - s[i:]對應的 t 的最長后綴的開始下標 - 1)。