Skip to content

Commit 18f2858

Browse files
committed
[ADD] 添加java三道排序题: 冒泡排序,选择排序和插入排序
1 parent b3d15ee commit 18f2858

File tree

71 files changed

+4107
-991
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+4107
-991
lines changed

bitmap/bitmap.py

+82-82
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,82 @@
1-
#!/usr/bin/env python
2-
#coding:utf-8
3-
4-
"""
5-
python实现BitMap数据结构
6-
"""
7-
8-
class BitMap1():
9-
"""使用列表实现的bitmap位图功能, 不节省空间,只为了直观展示理解用途"""
10-
def __init__(self, nbits):
11-
self.nbits = nbits
12-
self.bytes = [0] * (nbits + 1)
13-
14-
def set(self, k):
15-
if k > self.nbits:
16-
return
17-
self.bytes[k] = self.bytes[k] | 1
18-
19-
def get(self, k):
20-
if k > self.nbits:return false;
21-
res = self.bytes[k] & 1 != 0
22-
return res
23-
24-
class BitMap2():
25-
"""将数据存储有符号整数的前31位上面(兼容其他语言的整数最大表示大小,python已经不限制了)"""
26-
def __init__(self, m):
27-
"""
28-
:param m: max size
29-
"""
30-
self.max_size = m
31-
self.array = [0] * int((m + 31 -1) / 31) #多个整数来表示,防止大小不够
32-
33-
def bit_index(self, k):
34-
"""获取第k个位置位索引下标
35-
"""
36-
return k % 31
37-
38-
def set(self, k):
39-
"""设置第k个索引位置为1
40-
"""
41-
if k > self.max_size: return
42-
array_index = k // 31 # 获取数组索引,即第k的位置落在数组第几个元素上
43-
bit_index = self.bit_index(k) # 获取位索引
44-
self.array[array_index] = self.array[array_index] | (1 << bit_index)
45-
46-
def get(self, k):
47-
"""验证第k的索引位置是否为1
48-
"""
49-
if k > self.max_size: return false
50-
array_index = k // 31
51-
bit_index = self.bit_index(k)
52-
return self.array[array_index] & (1 << bit_index) != 0
53-
54-
55-
def test_bitmap1():
56-
bit_map = BitMap1(100)
57-
bit_map.set(5)
58-
print bit_map.bytes
59-
print bit_map.get(5)
60-
print bit_map.get(4)
61-
62-
def test_bitmap2():
63-
bit_map = BitMap2(128)
64-
# 存储字符串
65-
string1 = "http://www.baidu.com"
66-
for c in string1:
67-
bit_map.set(ord(c))
68-
print bit_map.array
69-
70-
# 验证字符串
71-
string2 = "https://www.baidu.com"
72-
flag = True
73-
for c in string2:
74-
flag = flag & bit_map.get(ord(c))
75-
if flag:
76-
print True
77-
else:
78-
print False
79-
80-
81-
if __name__ == '__main__':
82-
test_bitmap2()
1+
#!/usr/bin/env python
2+
#coding:utf-8
3+
4+
"""
5+
python实现BitMap数据结构
6+
"""
7+
8+
class BitMap1():
9+
"""使用列表实现的bitmap位图功能, 不节省空间,只为了直观展示理解用途"""
10+
def __init__(self, nbits):
11+
self.nbits = nbits
12+
self.bytes = [0] * (nbits + 1)
13+
14+
def set(self, k):
15+
if k > self.nbits:
16+
return
17+
self.bytes[k] = self.bytes[k] | 1
18+
19+
def get(self, k):
20+
if k > self.nbits:return false;
21+
res = self.bytes[k] & 1 != 0
22+
return res
23+
24+
class BitMap2():
25+
"""将数据存储有符号整数的前31位上面(兼容其他语言的整数最大表示大小,python已经不限制了)"""
26+
def __init__(self, m):
27+
"""
28+
:param m: max size
29+
"""
30+
self.max_size = m
31+
self.array = [0] * int((m + 31 -1) / 31) #多个整数来表示,防止大小不够
32+
33+
def bit_index(self, k):
34+
"""获取第k个位置位索引下标
35+
"""
36+
return k % 31
37+
38+
def set(self, k):
39+
"""设置第k个索引位置为1
40+
"""
41+
if k > self.max_size: return
42+
array_index = k // 31 # 获取数组索引,即第k的位置落在数组第几个元素上
43+
bit_index = self.bit_index(k) # 获取位索引
44+
self.array[array_index] = self.array[array_index] | (1 << bit_index)
45+
46+
def get(self, k):
47+
"""验证第k的索引位置是否为1
48+
"""
49+
if k > self.max_size: return false
50+
array_index = k // 31
51+
bit_index = self.bit_index(k)
52+
return self.array[array_index] & (1 << bit_index) != 0
53+
54+
55+
def test_bitmap1():
56+
bit_map = BitMap1(100)
57+
bit_map.set(5)
58+
print bit_map.bytes
59+
print bit_map.get(5)
60+
print bit_map.get(4)
61+
62+
def test_bitmap2():
63+
bit_map = BitMap2(128)
64+
# 存储字符串
65+
string1 = "http://www.baidu.com"
66+
for c in string1:
67+
bit_map.set(ord(c))
68+
print bit_map.array
69+
70+
# 验证字符串
71+
string2 = "https://www.baidu.com"
72+
flag = True
73+
for c in string2:
74+
flag = flag & bit_map.get(ord(c))
75+
if flag:
76+
print True
77+
else:
78+
print False
79+
80+
81+
if __name__ == '__main__':
82+
test_bitmap2()

bitmap/bloomfilter.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
#!/usr/bin/env python
2-
#coding:utf-8
1+
#!/usr/bin/env python
2+
#coding:utf-8

heap/getLeastNumbers.py

+32-32
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
#!/usr/bin/env python
2-
#coding:utf-8
3-
4-
"""
5-
面试题40. 最小的k个数
6-
7-
https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
8-
"""
9-
10-
from heapq import heappush, heappop
11-
class Solution(object):
12-
def getLeastNumbers(self, arr, k):
13-
"""
14-
:type arr: List[int]
15-
:type k: int
16-
:rtype: List[int]
17-
18-
解法1: 直接利用py的heapq构建最小堆即可 时间复杂度: n * logk
19-
"""
20-
if not arr:
21-
return -1
22-
min_heap = [] # 最小堆
23-
rets = []
24-
for i in arr:
25-
heappush(min_heap, i)
26-
for j in range(k):
27-
rets.append(heappop(min_heap))
28-
return rets
29-
30-
if __name__ == '__main__':
31-
s = Solution()
32-
nums = [4,5,1,6,2,7,3,8]
1+
#!/usr/bin/env python
2+
#coding:utf-8
3+
4+
"""
5+
面试题40. 最小的k个数
6+
7+
https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/
8+
"""
9+
10+
from heapq import heappush, heappop
11+
class Solution(object):
12+
def getLeastNumbers(self, arr, k):
13+
"""
14+
:type arr: List[int]
15+
:type k: int
16+
:rtype: List[int]
17+
18+
解法1: 直接利用py的heapq构建最小堆即可 时间复杂度: n * logk
19+
"""
20+
if not arr:
21+
return -1
22+
min_heap = [] # 最小堆
23+
rets = []
24+
for i in arr:
25+
heappush(min_heap, i)
26+
for j in range(k):
27+
rets.append(heappop(min_heap))
28+
return rets
29+
30+
if __name__ == '__main__':
31+
s = Solution()
32+
nums = [4,5,1,6,2,7,3,8]
3333
print(s.getLeastNumbers(nums, 4))

queue/__init__.py

+67-67
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,67 @@
1-
#!/usr/bin/env python
2-
#coding:utf-8
3-
4-
5-
"""
6-
用数组实现的队列
7-
"""
8-
class ArrayQueue(object):
9-
def __init__(self, capacity):
10-
self._items = []
11-
self._capacity = capacity
12-
self._head = 0
13-
self._tail = 0
14-
15-
def enqueue(self, item):
16-
"""入队操作
17-
"""
18-
# tail == capacity表示队列末尾没有空间了
19-
if self._tail == self._capacity:
20-
# tail == capacity && head==0表示整个队列都占满了
21-
if self._head == 0:
22-
return False
23-
else:
24-
# 执行数据搬移操作
25-
for i in range(0, self._tail - self._head):
26-
self._items[i] = self._items[i + self._head]
27-
# 更新head和tail
28-
self._tail = self._tail - self._head
29-
self._head = 0
30-
self._items.insert(self._tail, item)
31-
self._tail += 1
32-
return True
33-
34-
def dequeue(self):
35-
# 出队操作dequeue()的队空的条件是队头下标等于队尾下标。
36-
if self._head != self._tail:
37-
item = self._items[self._head]
38-
self._head += 1
39-
return item
40-
else:
41-
return None
42-
43-
def __repr__(self):
44-
return " ".join("%s" % item for item in self._items[self._head : self._tail])
45-
46-
47-
class ListQueue(object):
48-
"""使用List数据结构实现的简单版队列"""
49-
def __init__(self, n):
50-
self._items = []
51-
52-
def enqueue(self, item):
53-
"""入队"""
54-
self._items.insert(0, item)
55-
56-
def dequeue(self):
57-
"""出队"""
58-
# 队头在右边,因此pop()即为弹出队头
59-
return self._items.pop()
60-
def __repr__(self):
61-
return " ".join("%s" % i for i in self._items)
62-
63-
def test_ArrayQueue():
64-
queue = ArrayQueue(10)
65-
queue.enqueue(1)
66-
queue.enqueue(2)
67-
print queue
1+
#!/usr/bin/env python
2+
#coding:utf-8
3+
4+
5+
"""
6+
用数组实现的队列
7+
"""
8+
class ArrayQueue(object):
9+
def __init__(self, capacity):
10+
self._items = []
11+
self._capacity = capacity
12+
self._head = 0
13+
self._tail = 0
14+
15+
def enqueue(self, item):
16+
"""入队操作
17+
"""
18+
# tail == capacity表示队列末尾没有空间了
19+
if self._tail == self._capacity:
20+
# tail == capacity && head==0表示整个队列都占满了
21+
if self._head == 0:
22+
return False
23+
else:
24+
# 执行数据搬移操作
25+
for i in range(0, self._tail - self._head):
26+
self._items[i] = self._items[i + self._head]
27+
# 更新head和tail
28+
self._tail = self._tail - self._head
29+
self._head = 0
30+
self._items.insert(self._tail, item)
31+
self._tail += 1
32+
return True
33+
34+
def dequeue(self):
35+
# 出队操作dequeue()的队空的条件是队头下标等于队尾下标。
36+
if self._head != self._tail:
37+
item = self._items[self._head]
38+
self._head += 1
39+
return item
40+
else:
41+
return None
42+
43+
def __repr__(self):
44+
return " ".join("%s" % item for item in self._items[self._head : self._tail])
45+
46+
47+
class ListQueue(object):
48+
"""使用List数据结构实现的简单版队列"""
49+
def __init__(self, n):
50+
self._items = []
51+
52+
def enqueue(self, item):
53+
"""入队"""
54+
self._items.insert(0, item)
55+
56+
def dequeue(self):
57+
"""出队"""
58+
# 队头在右边,因此pop()即为弹出队头
59+
return self._items.pop()
60+
def __repr__(self):
61+
return " ".join("%s" % i for i in self._items)
62+
63+
def test_ArrayQueue():
64+
queue = ArrayQueue(10)
65+
queue.enqueue(1)
66+
queue.enqueue(2)
67+
print queue

0 commit comments

Comments
 (0)