算法
文章平均质量分 57
Unstoppable~~~
Hiter
展开
-
leetcode刷题——字符串(双指针、滑动窗口、动态规划)
具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1。将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。原创 2023-04-12 13:31:07 · 442 阅读 · 0 评论 -
leetcode刷题——数组部分(排序、双指针、二分查找)
例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。原创 2023-04-09 21:27:43 · 315 阅读 · 0 评论 -
手撕递归(汉诺塔问题C代码实例讲解)
目录递归问题铺垫一个简单的递归程序递归的内部机制递归满足三个条件循环和递归?汉诺塔问题实现递归问题铺垫一个简单的递归程序# include <stdio.h>//递归求和int f(int n){ int res; if(n == 1){ return 1; }else{ return n + f(n - 1); }}int main(){ int a = f(100); printf("%d",原创 2022-03-04 23:38:53 · 292 阅读 · 0 评论 -
手撕链式栈+循环队列(动态分配长度)
链式栈空栈示意图:栈中有元素示意图:#include <stdio.h>#include <malloc.h>#include <stdbool.h>//链式栈typedef struct Node{ int data; struct Node * next;}NODE, * PNODE;typedef struct Stack{ PNODE pTop; //栈顶 PNODE pBottom;//栈底}STA原创 2022-03-03 10:11:45 · 299 阅读 · 0 评论 -
手撕链表各操作(插入、删除、排序)、指针操作
目录链表指针(地址)指针基础指针和一维数组指针与地址指针传入函数结构体typedef的使用动态分配内存链表#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <stdbool.h>typedef struct Node{ //单链表的节点类型 int data; struct LNode * next;}LNode, * PNode; //Lin原创 2022-03-01 00:08:40 · 560 阅读 · 0 评论 -
leetcode.208 前缀树
题目Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,返回 false 。boolean startsWit原创 2021-11-01 20:55:06 · 71 阅读 · 0 评论 -
leetcode215. 数组中的第K个最大元素(手写最小堆)
题目给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4题解本体采用最小堆的思路,限制堆的大小为k,不断地填入数据,替换堆顶,重构堆结构,所有数据处理完后,堆顶就是第k大的结果class Solution { p原创 2021-10-27 00:46:48 · 171 阅读 · 0 评论 -
leetcode.264丑数Ⅱ
题目给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是只包含质因数 2、3 和/或 5 的正整数。示例 1:输入:n = 10输出:12解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2:输入:n = 1输出:1解释:1 通常被视为丑数。题解 def nthUglyNumber(self, n: int) -> int: #动态规划方法 #结果数组原创 2021-10-15 11:59:46 · 62 阅读 · 0 评论 -
leetcode.287寻找重复数字
一、题目给定一个包含 n + 1 个整数的数组 nums ,其数字都在 1 到 n 之间(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,找出 这个重复的数 。你设计的解决方案必须不修改数组 nums 且只用常量级 O(1) 的额外空间。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3示例 3:输入:nums = [1,1]输出:1示例 4:输入:nums = [1,1原创 2021-10-15 09:28:53 · 170 阅读 · 0 评论 -
leetcode2.两数相加
题目给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9,9,9,9,9], l2 = [9原创 2021-10-09 00:17:22 · 54 阅读 · 0 评论 -
leetcode239. 滑动窗口最大值(双向队列)
题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -1 -3] 5 3 6 7 31原创 2021-10-06 14:19:45 · 129 阅读 · 0 评论 -
leetcode24. 两两交换链表中的节点
题目给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2:输入:head = []输出:[]示例 3:输入:head = [1]输出:[1]提示:链表中节点的数目在范围 [0, 100] 内0 <= Node.val <= 100题解如上图所示,该链表排列为1->2->3->4我们所需要做的改动是,将2的原创 2021-10-03 10:52:36 · 55 阅读 · 0 评论 -
分治策略(二)
一、选第二大的数首先我们必须得到最大的数,然后再进行排序才能得到第二大的数,但是这样会造成一定的浪费,所以可以通过记录被最大数淘汰的数,在其中进行选择,降低了问题规模,以空间换时间。这其实就是我们所说的锦标赛算法。锦标赛算法:1.两两分组比较,大者进入下一轮,直到剩下1个元素 max 为止2.在每次比较中淘汰较小元素,将被淘汰元素记录在淘汰它的元素的链表上3.检查 max 的链表,从中找到最大元,即 second伪代码如下;实例如下;经过三轮淘汰得到最大值8,其链表中包含4,2,7只需在原创 2021-07-22 16:44:53 · 358 阅读 · 0 评论 -
分治策略(一)
一、分治的概念分治策略是对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。分治法的基本步骤 分治法在每一层递归上都有三个步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;合并:将各个子问题的解合并为原问题的解二、分治的一般描述性及设计要点一般原创 2021-07-21 16:22:54 · 601 阅读 · 0 评论 -
动态规划(一)
动态规划技术已经应用于多种组合优化问题的算法设计分析中,比如图的多起点与多终点的最短路径问题、矩阵链乘问题、最大投资效应问题、背包问题、最长公共子序列问题、图像压缩问题、最大子段和问题、最优二分检索树问题等等。原创 2021-04-11 20:36:29 · 281 阅读 · 0 评论