题目: 设计一个类,我们只能生成该类的一个实例
LeetCode: 此题LeetCode上没有
题解思路:
定义一个私有标志,并初始化为None,如果创建了一个实例则将此标志设置为该实例。
实现代码:
class Earth(object):
__instance = None
def __new__(cls):
if cls.__instance is not None:
# 如果__instance为空则表示为第一次创建实例
# 通过父类的__new__(cls)创建实例
cls.__instance = object.__new__(cls)
return cls.__instance
else:
# 返回上一个对象的引用
return cls.__instance
题目: 给定一个整数数组 a,其中1 ≤ a[i] ≤ n (n为数组长度),
其中有些元素出现两次而其他元素出现一次。找到所有出现两次的元素。
题目要求:你可以不用到任何额外空间并在O(n)时间复杂度内解决这个问题吗?
LeetCode: LeetCode 442:数组中重复的数据
题解思路:
- 首先由于该数组中间所有的数字都不会超过该数组的长度,所以我们可以用该数组下标的值来存储对应位置的值是否存在。
- 如果该位置的值大于零,则将该数组对应数组此数字映射下标的值设为负数,如果再次访问该负数时则将重复元素返回。
实现代码:
def findDuplicates(nums):
m_list = []
for i in nums:
# 首先将数组依次遍历,判断该数字对应数组下标的位置是否为整数
# 如果是正数,则表明该数字为第一次出现,如果为负数,则表示该数字已经重复出现过了
if nums[abs(i)-1] > 0:
nums[abs(i)-1] *= -1
else:
m_list.append(abs(i))
print(m_list)
if __name__ == '__main__':
list = [4, 3, 2, 7, 8, 2, 3, 1]
findDuplicates(list)
题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。
该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
题目要求:无
LeetCode: LeetCode 240:搜索二维矩阵 II
题解思路:
- 优于矩阵是有序的所以我们可以从首行最大的元素开始判断。
- 如果该值小于目标值,则该行不存在大于目标值的数,转而去判断下一行。
- 如果该值大于目标值,则将列进行舍弃,因为该列不存在大于目标值的数,因此判断剩余矩阵中否有该目标值。
实现代码:
def searchMatrix(matrix, target):
found = False
# 对应的行数
rows = len(matrix)
# 对应数组的列数
columns = len(matrix[0])
if matrix is not None and rows > 0 and columns > 0:
# 设定一个行的下标
row = 0
# 设定一个列的下标
column = columns - 1
# 因为行数一开始为零,所以设定循环行数不大于最大行数
# 列数循环最后不小于0
while row < rows and column >= 0:
if matrix[row][column] == target:
found = True
return found
elif matrix[row][column] > target:
column -= 1
else:
row += 1
return found
if __name__ == '__main__':
mli = [
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
found = searchMatrix(mli, 20)
print(found)
题目:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。
例如:当字符串为: We Are Happy
替换之后的字符串为: We%20Are%20Happy
题目要求:无
LeetCode: 牛客网
题解思路:
直接用python内置的字符串替换函数replace将空格替换为%20
实现代码:
def replaceSpace(s):
return s.replace(' ', '%20')
if __name__ == '__main__':
s = 'We are happy'
print(replaceSpace(s))
题目:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
题目要求:无
LeetCode: LeetCode206: 反转链表
题解思路:
将每个节点指向该节点的前一位,从而完成逆序。
实现代码:
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
# 申请两个节点,pre和 cur,pre指向None
pre = None
cur = head
# 遍历链表,while循环里面的内容其实可以写成一行
# 这里只做演示,就不搞那么骚气的写法了
while cur:
# 记录当前节点的下一个节点
tmp = cur.next
# 然后将当前节点指向pre
cur.next = pre
# pre和cur节点都前进一位
pre = cur
cur = tmp
return pre
作者:user7439t
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。
假设输入的前序遍历和中序遍历的结果中都不含重复的数字。
例如:
输入前序遍历序列: {1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},
则重建二叉树并返回。
题目要求:无
LeetCode: LeetCode206: 反转链表
题解思路:
将每个节点指向该节点的前一位,从而完成逆序。
实现代码:
class Solution(object):
def reverseList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
# 申请两个节点,pre和 cur,pre指向None
pre = None
cur = head
# 遍历链表,while循环里面的内容其实可以写成一行
# 这里只做演示,就不搞那么骚气的写法了
while cur:
# 记录当前节点的下一个节点
tmp = cur.next
# 然后将当前节点指向pre
cur.next = pre
# pre和cur节点都前进一位
pre = cur
cur = tmp
return pre
作者:user7439t
链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/dong-hua-yan-shi-206-fan-zhuan-lian-biao-by-user74/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。