![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
Q1nyuChen
Rookie on da way
展开
-
Shuffle an Array & Linked List Random Node
leetcode 384class Solution: def __init__(self, nums: List[int]): self.nums = nums self.ori = nums[:] self.n = len(nums) def reset(self) -> List[int]: self.nums = self.ori[:] return self.nums def sh原创 2022-03-14 14:28:12 · 412 阅读 · 0 评论 -
滑动窗口模版
def findSubstring(s): N = len(s) # 数组/字符串长度 left, right = 0, 0 # 双指针,表示当前遍历的区间[left, right],闭区间 counter = collections.Counter() # 用于统计 子数组/子区间 是否有效 res = 0 # 保存最大的满足题目要求的 子数组/子串 长度 while right < N: # 当右边的指针没有搜索到 数组/字符串 的结尾 co原创 2022-02-25 10:33:00 · 55 阅读 · 0 评论 -
排序算法(Python)
import randomclass Selection(object): @staticmethod def sort(nums): n = len(nums) for i in range(n): min_idx = i for j in range(i + 1, n): if nums[j] < nums[min_idx]:原创 2022-01-09 20:31:46 · 379 阅读 · 0 评论 -
线段树代码
学习资源:https://www.bilibili.com/video/av47331849/# 线段树# 对于满二叉树来说,当前节点下标i, 左儿子下标2i+1, 右儿子下标2i+2# 0# 1 2# 3 4 5 6def build_tree(arr, tree, node, start, end): # node为根节点下标 if start == end: tree[node] = a原创 2021-11-30 15:41:40 · 278 阅读 · 0 评论 -
迪克斯特拉算法
参考:算法图解# 在未处理的节点中找到开销最小的节点def find_lowest_cost_node(costs, processed): lowest = float("inf") lowest_cost_node = None for node in costs: cost = costs[node] if cost < lowest and node not in processed: lowest = co原创 2021-11-01 13:55:13 · 107 阅读 · 0 评论 -
简单快速排序 (python)
def q_sort(arr): if len(arr) < 2: return arr else: pivot = arr[0] less = [i for i in arr[1:] if i <= pivot] greater = [i for i in arr[1:] if i > pivot] return q_sort(less) + [pivot] + q_sort(greater)原创 2021-10-29 10:27:34 · 110 阅读 · 0 评论 -
二分查找(递归/非递归)
def b_search(arr, target): left = 0 right = len(arr) - 1 while left <= right: mid = left + (right - left) // 2 if arr[mid] == target: return True elif arr[mid] < target: left = mid + 1原创 2021-10-29 10:04:59 · 65 阅读 · 0 评论 -
随机快速排序
/** * 快速排序3.0 —— 随机快排,时间复杂度收敛于 O(NlogN) */public class QuickSort { /** * * @param arr 需要排序的数组 * @param L 需要排序部分的左边界 * @param R 需要排序部分的右边界 */ public static ...原创 2020-01-31 18:33:38 · 154 阅读 · 0 评论 -
使用异或运算交换数组中不同位置的值
private static void swap(int[] arr,int i,int j){ arr[i] = arr[i]^arr[j]; arr[j] = arr[i]^arr[j]; arr[i] = arr[i]^arr[j]; }原创 2020-01-31 18:00:18 · 237 阅读 · 0 评论 -
荷兰国旗问题(给出划分值的partition)
public class NeitherLandFlag { /** * * @param arr 目标数组 * @param L 需要分组的范围的左边界 * @param R 需要分组的范围的右边界 * @param p 划分值 * @return */ public int[] partiti...原创 2020-01-31 17:18:58 · 360 阅读 · 0 评论 -
排序算法 (Java)
时间复杂度 Big O算法花费时间随着问题规模的扩大的变化不考虑必须要做的操作:循环、赋初值、程序初始化…;不考虑常数项;不考虑低次项;一般时间复杂度都是“最差”的情况E.g.:访问数组某个位置的值: O(1)访问链表某个位置的值: O(n)求数组平均数:O(n)选择排序 SelectionSort最简单最没用: O(n^2), 不稳定找到最小的数的位置(索引)...原创 2019-12-24 17:31:54 · 92 阅读 · 0 评论 -
数组某部分索引的中间位置
int mid = L + ((R - L) >> 1)避免数组越界,又使用位运算提高了效率,完美!原创 2020-01-21 20:37:11 · 282 阅读 · 0 评论