|
6352 | 6352 | {
|
6353 | 6353 | "language": "cpp",
|
6354 | 6354 | "text": "\nclass Solution {\npublic:\n vector<int> majorityElement(vector<int>& nums) {\n int c1 = 0, c2 = 0, v1 = 0, v2 = 1;\n for (int n : nums) {\n if (v1 == n) ++c1;\n else if (v2 == n) ++c2;\n else if (!c1) v1 = n, ++c1;\n else if (!c2) v2 = n, ++c2;\n else --c1, --c2;\n }\n c1 = c2 = 0;\n for (int n : nums) {\n if (v1 == n) ++c1;\n if (v2 == n) ++c2;\n }\n vector<int> v;\n if (c1 > nums.size() / 3) v.push_back(v1);\n if (c2 > nums.size() / 3) v.push_back(v2);\n return v;\n }\n};\n"
|
| 6355 | + }, |
| 6356 | + { |
| 6357 | + "language": "py", |
| 6358 | + "text": "\n\nclass Solution:\n def majorityElement(self, nums):\n c1 = c2 = 0\n v1 = v2 = -1\n\n for num in nums:\n if num == v1: c1 += 1\n elif num == v2: c2 += 1\n elif c1 == 0:\n c1 = 1\n v1 = num\n elif c2 == 0:\n c2 = 1\n v2 = num\n else:\n c1 -= 1\n c2 -= 1\n # check\n c1 = c2 = 0\n for num in nums:\n if v1 == num: c1 += 1\n if v2 == num: c2 += 1\n ans = []\n if c1 > len(nums)//3: ans.append(v1)\n if c2 > len(nums)//3: ans.append(v2)\n return list(set(ans))\n" |
6355 | 6359 | }
|
6356 | 6360 | ]
|
6357 | 6361 | },
|
|
13271 | 13275 | }
|
13272 | 13276 | ]
|
13273 | 13277 | },
|
| 13278 | +"find-original-array-from-doubled-array":{ |
| 13279 | + "id": "2007", |
| 13280 | + "name": "find-original-array-from-doubled-array", |
| 13281 | + "pre": [ |
| 13282 | + { |
| 13283 | + "text": "哈希表", |
| 13284 | + "link": null, |
| 13285 | + "color": "gold" |
| 13286 | + } |
| 13287 | + ], |
| 13288 | + "keyPoints": [ |
| 13289 | + { |
| 13290 | + "text": "对changed进行排序后再处理", |
| 13291 | + "link": null, |
| 13292 | + "color": "blue" |
| 13293 | + } |
| 13294 | + ], |
| 13295 | + "companies": [], |
| 13296 | + "giteeSolution": "https://gitee.com/golong/leetcode/blob/master/problems/2007.find-original-array-from-doubled-array.md", |
| 13297 | + "solution": "https://github.com/azl397985856/leetcode/blob/master/problems/2007.find-original-array-from-doubled-array.md", |
| 13298 | + "code": [ |
| 13299 | + { |
| 13300 | + "language": "py", |
| 13301 | + "text": "\n\nclass Solution:\n def findOriginalArray(self, changed: List[int]) -> List[int]:\n counter = collections.Counter(changed)\n if counter[0] % 2: return []\n n = len(changed)\n changed.sort()\n ans = []\n for c in changed:\n if counter[c] < 1: continue\n double = c * 2\n if double in counter:\n ans.append(c)\n else:\n return []\n if double == 0:\n counter[double] -= 2\n else:\n counter[double] -= 1\n counter[c] -= 1\n if len(ans) == n // 2: return ans\n return []\n\n" |
| 13302 | + }, |
| 13303 | + { |
| 13304 | + "language": "py", |
| 13305 | + "text": "\nclass Solution:\n def recoverArray(self, nums: List[int]) -> List[int]:\n n = len(nums)\n nums.sort()\n for i in range(n):\n # enumerate i, assueme that: nums[i] is higher[0]\n d = nums[i] - nums[0]\n if d == 0 or d & 1: continue # k 应该是大于 0 的整数\n k = d // 2\n counter = collections.Counter(nums)\n ans = []\n for key in sorted(counter):\n if counter[key + 2 * k] >= counter[key]:\n ans += [key + k] * counter[key]\n counter[key + 2 * k] -= counter[key]\n else:\n break # 剪枝(不剪枝的话实测 Python 也能通过,不过要多花很多时间)\n if len(ans) == n // 2: return ans\n return []\n" |
| 13306 | + } |
| 13307 | + ] |
| 13308 | +}, |
13274 | 13309 | "maximum-earnings-from-taxi":{
|
13275 | 13310 | "id": "2008",
|
13276 | 13311 | "name": "maximum-earnings-from-taxi",
|
|
13529 | 13564 | }
|
13530 | 13565 | ]
|
13531 | 13566 | },
|
| 13567 | +"intervals-between-identical-elements":{ |
| 13568 | + "id": "5965", |
| 13569 | + "name": "intervals-between-identical-elements", |
| 13570 | + "pre": [ |
| 13571 | + { |
| 13572 | + "text": "前缀和", |
| 13573 | + "link": null, |
| 13574 | + "color": "cyan" |
| 13575 | + } |
| 13576 | + ], |
| 13577 | + "keyPoints": [ |
| 13578 | + { |
| 13579 | + "text": "前缀和+后缀和优化时间复杂度", |
| 13580 | + "link": null, |
| 13581 | + "color": "blue" |
| 13582 | + } |
| 13583 | + ], |
| 13584 | + "companies": [], |
| 13585 | + "giteeSolution": "https://gitee.com/golong/leetcode/blob/master/problems/5965.intervals-between-identical-elements.md", |
| 13586 | + "solution": "https://github.com/azl397985856/leetcode/blob/master/problems/5965.intervals-between-identical-elements.md", |
| 13587 | + "code": [ |
| 13588 | + { |
| 13589 | + "language": "py", |
| 13590 | + "text": "\n\nclass Solution:\n def getDistances(self, arr: List[int]) -> List[int]:\n ans = []\n n = len(arr)\n last_map = collections.defaultdict(lambda:-1)\n pre = collections.defaultdict(lambda:(0,0))\n suf = collections.defaultdict(lambda:(0,0))\n for i in range(n):\n a = arr[i]\n last = last_map[a]\n v, c = pre[last]\n pre[i] = v + c * (i - last), c + 1\n last_map[a] = i\n last_map = collections.defaultdict(lambda:len(arr))\n for i in range(n-1,-1,-1):\n a = arr[i]\n last = last_map[a]\n v, c = suf[last]\n suf[i] = v + c * (last - i), c + 1\n last_map[a] = i\n for i, a in enumerate(arr):\n ans.append(pre[i][0] + suf[i][0])\n return ans\n\n\n" |
| 13591 | + } |
| 13592 | + ] |
| 13593 | +}, |
13532 | 13594 | "md":{
|
13533 | 13595 | "id": "Bus-Fare",
|
13534 | 13596 | "name": "md",
|
|
13748 | 13810 | }
|
13749 | 13811 | ]
|
13750 | 13812 | },
|
| 13813 | +"md":{ |
| 13814 | + "id": "Maximize-the-Number-of-Equivalent-Pairs-After-Swaps", |
| 13815 | + "name": "md", |
| 13816 | + "pre": [ |
| 13817 | + { |
| 13818 | + "text": "并查集", |
| 13819 | + "link": null, |
| 13820 | + "color": "volcano" |
| 13821 | + }, |
| 13822 | + { |
| 13823 | + "text": "BFS", |
| 13824 | + "link": null, |
| 13825 | + "color": "purple" |
| 13826 | + }, |
| 13827 | + { |
| 13828 | + "text": "DFS", |
| 13829 | + "link": null, |
| 13830 | + "color": "red" |
| 13831 | + } |
| 13832 | + ], |
| 13833 | + "keyPoints": [], |
| 13834 | + "companies": [], |
| 13835 | + "giteeSolution": "https://gitee.com/golong/leetcode/blob/master/problems/Maximize-the-Number-of-Equivalent-Pairs-After-Swaps.md", |
| 13836 | + "solution": "https://github.com/azl397985856/leetcode/blob/master/problems/Maximize-the-Number-of-Equivalent-Pairs-After-Swaps.md", |
| 13837 | + "code": [ |
| 13838 | + { |
| 13839 | + "language": "py", |
| 13840 | + "text": "\n\nclass UF:\n def __init__(self, M):\n self.parent = {}\n self.cnt = 0\n # 初始化 parent,size 和 cnt\n for i in range(M):\n self.parent[i] = i\n self.cnt += 1\n\n def find(self, x):\n if x != self.parent[x]:\n self.parent[x] = self.find(self.parent[x])\n return self.parent[x]\n return x\n def union(self, p, q):\n if self.connected(p, q): return\n leader_p = self.find(p)\n leader_q = self.find(q)\n self.parent[leader_p] = leader_q\n self.cnt -= 1\n def connected(self, p, q):\n return self.find(p) == self.find(q)\n\nclass Solution:\n def solve(self, A, B, C):\n n = len(A)\n uf = UF(n)\n for fr, to in C:\n print(fr, to)\n uf.union(fr, to)\n group = collections.defaultdict(list)\n\n for i in uf.parent:\n group[uf.find(i)].append(i)\n ans = 0\n for i in group:\n indices = group[i]\n values = collections.Counter([A[i] for i in indices])\n for i in indices:\n if values[B[i]] > 0:\n values[B[i]] -= 1\n ans += 1\n return ans\n\n" |
| 13841 | + } |
| 13842 | + ] |
| 13843 | +}, |
13751 | 13844 | "md":{
|
13752 | 13845 | "id": "Minimum-Dropping-Path-Sum",
|
13753 | 13846 | "name": "md",
|
|
0 commit comments