diff --git a/problems/1207.独一无二的出现次数.md b/problems/1207.独一无二的出现次数.md index afc93eda..1a7a0019 100644 --- a/problems/1207.独一无二的出现次数.md +++ b/problems/1207.独一无二的出现次数.md @@ -98,7 +98,8 @@ class Solution { ``` Python: -```python +```python +# 方法 1: 数组在哈西法的应用 class Solution: def uniqueOccurrences(self, arr: List[int]) -> bool: count = [0] * 2002 @@ -113,6 +114,26 @@ class Solution: return False return True ``` +```python +# 方法 2: map 在哈西法的应用 +class Solution: + def uniqueOccurrences(self, arr: List[int]) -> bool: + ref = dict() + + for i in range(len(arr)): + ref[arr[i]] = ref.get(arr[i], 0) + 1 + + value_list = sorted(ref.values()) + + for i in range(len(value_list) - 1): + if value_list[i + 1] == value_list[i]: + return False + + return True + +``` + + Go: JavaScript: diff --git a/problems/二叉树理论基础.md b/problems/二叉树理论基础.md index 387aa64f..9541baaf 100644 --- a/problems/二叉树理论基础.md +++ b/problems/二叉树理论基础.md @@ -59,6 +59,7 @@ * 它的左、右子树也分别为二叉排序树 下面这两棵树都是搜索树 + diff --git a/problems/算法模板.md b/problems/算法模板.md index 24d3e6bd..59de69df 100644 --- a/problems/算法模板.md +++ b/problems/算法模板.md @@ -803,6 +803,46 @@ Java: Python: +## 二分查找法 +```python +def binarysearch(nums, target): + low = 0 + high = len(nums) - 1 + while (low <= high): + mid = (high + low)//2 + + if (nums[mid] < target): + low = mid + 1 + + if (nums[mid] > target): + high = mid - 1 + + if (nums[mid] == target): + return mid + + return -1 +``` + +## KMP + +```python +def kmp(self, a, s): + # a: length of the array + # s: string + + next = [0]*a + j = 0 + next[0] = 0 + + for i in range(1, len(s)): + while j > 0 and s[j] != s[i]: + j = next[j - 1] + + if s[j] == s[i]: + j += 1 + next[i] = j + return next +``` Go: