基础算法
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 · 157 阅读 · 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 · 153 阅读 · 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 · 203 阅读 · 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 · 375 阅读 · 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 · 385 阅读 · 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 = Noneclass Solution:原创 2020-09-13 16:11:50 · 84 阅读 · 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 dequeclass Solution: def l原创 2020-09-11 23:10:57 · 218 阅读 · 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 · 1398 阅读 · 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 · 179 阅读 · 0 评论 -
前中序遍历数组转换为后序遍历数组
前中序遍历数组转换为后序遍历数组不能通过构建二叉树来做import sysstr_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 · 404 阅读 · 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 · 777 阅读 · 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 · 551 阅读 · 0 评论 -
网易笔试2020-8
网易笔试2020-8现在有n个物品,每个物品都有一个价值,现在想将这些物品分给两个人,要求这两个人分到的物品价值总和相同(个数可以不同,总价值相同即可),剩下的物品就要扔掉,现在想知道最少需要扔多少价值的物品才能满足要求分给两个人。...原创 2020-08-11 21:00:31 · 412 阅读 · 0 评论