算法&数据结构
文章平均质量分 53
依旧风轻
葵花成海,你在不在
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用 Swift 实现 LRU 缓存淘汰策略
特性实现方式泛型支持泛型设计O(1) 查找使用 DictionaryO(1) 插入删除使用双向链表高复用性泛型设计支持任意Key/Value类型。原创 2025-04-04 22:19:49 · 583 阅读 · 0 评论 -
寻找最近的公共父视图
循环嵌套迭代来查询最近的公共父视图, 时间复杂度。求两个视图的最近公共父视图。原创 2024-03-08 00:30:54 · 509 阅读 · 0 评论 -
规并排序(Swift版本)
时间复杂度为O(nlogn);适合大规模的数据排序;相比于冒泡排序、插入排序、选择排序这三种排序算法, 更加常用;用到了分治思想(即分而治之, 英文叫 “Divide and conquer”),非常巧妙;英文名称:Merge Sort;分治思想, 在很多领域都有广泛的应用,例如算法领域有分治算法(归并排序、快速排序都属于分治算法,二分法查找也是一种分治算法);分治算法一般都是用"递归"来实现的 (分治是一种解决问题的处理思想,递归是一种编程技巧);原创 2023-03-06 00:15:26 · 561 阅读 · 0 评论 -
232. 用栈实现队列
题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:* void push(int x) 将元素 x 推到队列的末尾* int pop() 从队列的开头移除并返回元素* int peek() 返回队列开头的元素* boolean empty() 如果队列为空,返回 true ;否则,返回 false说明:* 你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek/pop fr原创 2022-04-17 18:04:59 · 115 阅读 · 0 评论 -
020. 有效的括号(Swift版)
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:1. 左括号必须用相同类型的右括号闭合。2. 左括号必须以正确的顺序闭合。算法实现func isValid(_ s: String) -> Bool { let pairMap = ["(": ")", "{": "}", "[": "]"] as [Character: Character] var stack = [Cha原创 2022-04-17 00:06:40 · 2539 阅读 · 0 评论 -
判断链表中是否有环(Swift实现)
题目// 给你一个链表的头节点 head ,判断链表中是否有环。/** * Definition for singly-linked list. * public class ListNode { * public var val: Int * public var next: ListNode? * public init(_ val: Int) { * self.val = val * self.next = nil *原创 2022-04-06 23:54:43 · 2341 阅读 · 3 评论 -
Reverse All Words in a String 反转字符串中的所有单词
Reverse All Words in a String 反转字符串中的所有单词解法1class Solution { func reverseWords(_ s: String) -> String { if s.count <= 1 { return s } var result = "" let array = s.split(separator: " ") for charact原创 2020-05-12 17:10:29 · 232 阅读 · 0 评论 -
判断数组中是否存在两数之和等于目标值(Swift实现)
判断数组中是否存在两数之和等于目标值show the code 代码展示/* * 给定一个整数数组和一个目标值, 判断数组中是否有两个数之和等于目标值. */private func twoSum(nums: [Int], _ target: Int) -> Bool { var set = Set<Int>(); for item in nums { if set.contains(target - item) { ret原创 2020-05-12 13:05:13 · 636 阅读 · 0 评论 -
1. 两数之和 (Swift版)
题目Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sa...原创 2019-03-03 00:40:41 · 258 阅读 · 0 评论 -
Implement Stack Using Swift 使用Swift实现栈
Implement Stack Using Swift 使用Swift实现栈show the code 代码展示/// 泛型版本的栈(imple by sqi in 2020.05.12)struct Stack<Element> { // 声明的同时进行初始化 var items = [Element]() // 是否为空 var isEmpty: Bool { return items.isEmpty } // 栈顶元素 var topI原创 2020-05-12 03:14:53 · 227 阅读 · 0 评论 -
原地排序的快排算法(Swift实现)
原地排序, 分界点选取最后一个元素/// 原地分区函数(array: 待分区数组, p: 起始下标, r: 结束下标)private func partition(_ array: inout [Int], _ p: Int, _ r: Int) -> Int { let pivot = array[r] var i = p for j in p...r-1 { if array[j] < pivot { // 交换数组下标为原创 2020-05-11 03:46:31 · 855 阅读 · 1 评论 -
堆 Heap
堆 HeapOverview 概述堆排序是一种原地的、时间复杂度为 O(nlogn)的排序算法;尽管和快排算法的时间复杂度都是 O(nlogn),甚至堆排序比快速排序的时间复杂度还要稳定,但是,在实际的软件开发中,快速排序的性能要比堆排序好;堆是一种特殊的数;完全二叉树堆中每一个节点的值都必须≥(大顶堆)或≤(小顶堆)其子树中每个节点的值对于同一组数据,我们可以构建多种不同形态的堆;堆的存储Heap比较适合用数组来存储;用数组来存储完全二叉树是非常节省存储空间的原创 2020-05-11 03:44:43 · 257 阅读 · 0 评论 -
(0001)删除字符串中的公共字符
(0001)删除字符串中的公共字符题目: 输入两个字符串, 从第一字符串(下文称为x)中删除第二个字符串(下文简称为y)中所有的字符. 例如, 输入They are students.和aeiou, 则删除之后的第一个字符串变成Thy r stdnts.解题思路最简单的思路两层循环遍历, 每遍历到字符串 y 中的一个字符, 就在字符串 x 中找到相同的字符, 找到之后删除它,并将字符串...原创 2020-04-28 02:24:49 · 342 阅读 · 0 评论 -
复杂度为O(n²)的经典排序算法
复杂度为O(n²)的经典排序算法冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。排序算法时间复杂度是否基于比较冒泡, 插入, 选择O(n²)YES快排, 归并O(nlogn)YES桶, 计数, 基数O(n)NO排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度在对同一阶时间复杂度的排序算法性能对比...原创 2020-04-27 17:32:22 · 791 阅读 · 0 评论 -
均摊时间复杂度
均摊时间复杂度均摊时间复杂度,听起来跟平均时间复杂度有点儿像。对于初学者来说,这两个概念确实非常容易弄混。我前面说了,大部分情况下,我们并不需要区分最好、最坏、平均三种复杂度。平均复杂度只在某些特殊情况下才会用到,而均摊时间复杂度应用的场景比它更加特殊、更加有限。/* * @功能 往数组中插入数据的功能。当数组满了之后,也就是代码中的 count == array.length 时,我们...原创 2020-04-07 00:02:19 · 385 阅读 · 0 评论 -
全面分析算法复杂度
在很多时候, 由于原始数据的不确定性, 算法的复杂度并不是唯一的, 可能具有多种不同的复杂度, 一个算法完整的时间复杂度分析包括如下:最好情况时间复杂度(best case time complexity);最坏情况时间复杂度(worst case time complexity);平均情况时间复杂度(average case time complexity);均摊时间复杂...原创 2020-04-06 22:49:23 · 1111 阅读 · 0 评论 -
掌握算法复杂度分析
复杂度分析> 数据结构和算法本身解决的是"快"(让代码运行的更快)和"省"(让代码更省存储空间)的问题;> 执行效率是算法一个非常重要的考量指标;> 如何衡量"执行效率" -> 时间, 空间复杂度;> 复杂度分析是整个算法学习的精髓,只要掌握了它,数据结构和算法的内容基本上就掌握了一半;大 O 复杂度表示法大 O 时间复杂度实际上并不具体表示代码真正...原创 2020-04-06 16:00:27 · 333 阅读 · 0 评论
分享