
基础算法
qy_zhizi
HUST研究僧-计算机视觉
展开
-
归并排序
归并排序(容易错) #%% arr = [4,6,7,8,7,1,2,3] print(arr) def mergeSort(arr, lo, hi): if hi -lo <= 1: # 这里错写成 hi - lo < 1: 无法跳出递归,因为此时lo = 0, hi = 1 return mi = (lo + hi) // 2 mergeSort(arr, lo, mi) mergeSort(arr, mi, hi) B = arr[l原创 2020-10-10 22:45:02 · 219 阅读 · 0 评论 -
插入排序
插入排序 #%% # 插入排序 # 插入排序是一个对少量元素进行排序的有效算法,插入排序是稳定的 # 各种插入排序,直接插入排序 arr = [3,5,2,6,8,3,4] def insert_sort(arr): for i in range(1, len(arr)): for j in range(0, i): if arr[i] < arr[j]: arr[i], arr[j] = arr[j], arr[i]原创 2020-10-10 22:23:59 · 212 阅读 · 0 评论 -
LRU缓冲机制
LRU缓冲机制 使用有序字典 class LRUCache(collections.OrderedDict): # collections.OrderedDict def __init__(self, capacity: int): super().__init__() # 初始化父类(超类) self.capacity = capacity def get(self, key: int) -> int: if key not原创 2020-09-27 23:44:30 · 266 阅读 · 0 评论 -
最长无的重复子串的长度
最长无的重复子串的长度 # # # @param arr int整型一维数组 the array # @return int整型 # class Solution: def maxLength(self , arr ): # write code here fisrtprt = 0 dict1 = {} dict1[arr[0]] = 0 maxlen = 1 for i in range(1,len原创 2020-09-19 00:15:07 · 407 阅读 · 0 评论 -
二叉搜索树第K大节点和第K小节点
第K大节点 dfs,中序遍历先便利右子树,再遍历左子树,如果中序遍历是升序的情况. class Solution: def kthLargest(self, root: TreeNode, k: int) -> int: def dfs(root): if not root: return dfs(root.right) if self.k == 0: return self.k原创 2020-09-13 17:17:29 · 430 阅读 · 0 评论 -
树的深度
bfs dfs 两种解法 bfs 没有直接使用collections.deque, 而是使用了两个列表, nodelist 和 tmplist # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution:原创 2020-09-13 16:11:50 · 125 阅读 · 0 评论 -
dfs 队列 二叉树层序遍历(牛客网题)
dfs 队列 二叉树层序遍历(牛客网题) # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None # # # @param root TreeNode类 # @return int整型二维数组 # from collections import deque class Solution: def l原创 2020-09-11 23:10:57 · 264 阅读 · 0 评论 -
二分法查找 左闭右开,划分区间
第一题 class Solution: def missingNumber(self, nums: List[int]) -> int: lo = 0 hi = len(nums) while lo < hi: mi = (lo + hi) // 2 if mi == nums[mi]: lo = mi +1 else:原创 2020-08-26 14:06:18 · 1496 阅读 · 0 评论 -
环形链表II 快慢指针
参考于: https://leetcode-cn.com/problems/linked-list-cycle-ii/solution/linked-list-cycle-ii-kuai-man-zhi-zhen-shuang-zhi-/ 注意要用距离、几何来理解这道题 使用快慢指针 # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x #原创 2020-08-25 00:45:10 · 251 阅读 · 0 评论 -
前中序遍历数组转换为后序遍历数组
前中序遍历数组转换为后序遍历数组 不能通过构建二叉树来做 import sys str_value = sys.stdin.readline().split() preOrder = list(map(int, str_value)) str_value = sys.stdin.readline().split() inOrder = list(map(int, str_value)) length = len(preOrder) def dfs(p1, p2, i1, i2): if p2-原创 2020-08-20 23:28:41 · 461 阅读 · 0 评论 -
含有重复项的二分法查找c++
二分法查找有序向量二分法查找 有序向量二分法查找 # include <iostream> #include <vector> using namespace std; //[lr) template <typename T> int binarySearch_R(vector<T> L,T elem){ int l=0,mid,r=L.si...原创 2020-03-30 12:24:50 · 862 阅读 · 0 评论 -
哈希表-两数之和
两数之和-哈希表方法 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例:输入[2,7,11,15] ,输出[0,1] python3: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: hashmap={}原创 2020-06-15 16:03:02 · 622 阅读 · 0 评论 -
网易笔试2020-8
网易笔试2020-8 现在有n个物品,每个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人分到的物品价值总和相同(个数可以不同,总价值相同即可),剩下的物品就要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。 ...原创 2020-08-11 21:00:31 · 464 阅读 · 0 评论