![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 84
彩虹糖梦
A penny for my thoughts, oh no I’ll sell them for a dollar. They're worth so much more after I’m a goner.
展开
-
1722. 执行交换操作后的最小汉明距离(并查集求解连通分量)
题目给你两个整数数组 source 和 target ,长度都是 n 。还有一个数组 allowedSwaps ,其中每个 allowedSwaps[i] = [ai, bi] 表示你可以交换数组 source 中下标为 ai 和 bi(下标从 0 开始)的两个元素。注意,你可以按 任意 顺序 多次 交换一对特定下标指向的元素。相同长度的两个数组source 和 target 间的 汉明距离 是元素不同的下标数量。形式上,其值等于满足source[i] != target[i] (下标从 0 开..原创 2021-01-12 20:54:25 · 406 阅读 · 0 评论 -
Leetcode第185场周赛
1417. 重新格式化字符串签到题,没什么好说的,比赛的时候写的复杂了一些。class Solution { public String reformat(String s) { char [] arr = s.toCharArray(); ArrayList<Character> cs1 = new ArrayList<C...原创 2020-04-21 11:48:37 · 268 阅读 · 3 评论 -
leetcode第181场周赛题解
1389. 按照既定顺序创建目标数组给你两个整数数组 nums 和 index。你需要按照以下规则创建目标数组:目标数组 target 最初为空。按从左到右的顺序依次读取 nums[i] 和 index[i],在 target 数组中的下标 index[i] 处插入值 nums[i] 。重复上一步,直到在 nums 和 index 中都没有要读取的元素。请你返回目标数组。题目保证...原创 2020-03-31 11:46:39 · 407 阅读 · 3 评论 -
Leetcode 第174场周赛题解
这两天在央视上看了很多关于武汉医生的报道,颇受触动。每个人都有每个人的职责,对于赋闲在家的我们,除了老老实实自我隔离,为武汉加油鼓劲外,唯一能做的,可能就是不让每一天的时光荒废了。武汉加油!!!昨天进行的Leetcode第174场周赛颇有纪念意义,这是我第一次四道题全部在竞赛时间内做出,虽然几乎是最后一刻才AC。1341. 方阵中战斗力最弱的k行给你一个大小为m* n...原创 2020-02-03 10:18:21 · 1836 阅读 · 2 评论 -
Leetcode 第173场周赛题解
5319. 删除回文子序列题目描述给你一个字符串s,它仅由字母'a' 和 'b'组成。每一次删除操作都可以从 s 中删除一个回文 子序列。返回删除给定字符串中所有字符(字符串为空)的最小删除次数。「子序列」定义:如果一个字符串可以通过删除原字符串某些字符而不改变原字符顺序得到,那么这个字符串就是原字符串的一个子序列。「回文」定义:如果一个字符串向后和向前读是一致的,那么这...原创 2020-01-26 16:35:01 · 549 阅读 · 1 评论 -
leetcode 1326. 灌溉花园的最少水龙头数目
新的一年,从重拾Leetcode开始!题目内容在 x 轴上有一个一维的花园。花园长度为n,从点0开始,到点n结束。花园里总共有n + 1个水龙头,分别位于[0, 1, ..., n]。给你一个整数n和一个长度为n + 1的整数数组ranges,其中ranges[i](下标从 0 开始)表示:如果打开点i处的水龙头,可以灌溉的区域为[i - ...原创 2020-01-25 17:09:20 · 1793 阅读 · 0 评论 -
面向初学者的蒙特卡洛树搜索MCTS详解及其实现
蒙特卡洛搜索算法是棋类博弈中常用的算法,本文介绍了蒙特卡洛搜索算法的原理,实现以及示例等内容,让读者对这一经典算法能有更加透彻的认识。原创 2019-11-24 20:48:44 · 22976 阅读 · 7 评论 -
算法笔记: 最小生成树
最小生成树,是一个十分重要的知识点。最早学它的时候,觉得它的算法思想很朴素,实现起来也很简单,但是伴随着后来的学习,我发现,最小生成树算法确实十分常用,算法题中也常常会手撸一个最小生成树,在这里,在把最小生成树相关知识点整理一下。定义最小生成树,首先,它是一棵基于图生成的树。它符合树的定义,并且包含了原图中的所有节点。同时我们要求,这棵树,其边相连的权重和是所有生成树中最小的,这...原创 2019-10-24 10:26:09 · 342 阅读 · 0 评论 -
算法笔记:使用A*算法解决八数码问题
coursera上普林斯顿大学算法课中第四周的作业,使用A*算法解决八数码问题。作业的具体要求如下:https://coursera.cs.princeton.edu/algs4/assignments/8puzzle/specification.php我提交的作业(90分):https://github.com/caozixuan/AlgorithmLearning/tree/maste...原创 2019-10-22 19:42:54 · 3947 阅读 · 0 评论 -
算法笔记:动态规划(Dynamic programming)
动态规划问题一直是我心中永远的痛,说起来它的思想不复杂,就是把原问题分解成一个一个的子问题,逐渐分解下去。再详细一点说,对于某个问题,我们划分不同的状态和确定状态的表示方法,构建状态与状态之间的转移方程(问题与问题间的联系),最后确定问题的边界,解决问题。话是这么说,但是动态规划的问题实在是太灵活了,一方面很多题目难以确定是不是用动态规划做(说不定是贪心呢),另一方面状态转移方程很难确定,很容...原创 2019-09-07 15:26:25 · 312 阅读 · 0 评论 -
leetcode 1144. 递减元素使数组呈锯齿状
1144.递减元素使数组呈锯齿状坚持刷leetcode,巩固算法基础。 这个题目刚看的时候感觉稍微有点复杂,想了一下其实没有什么优化问题,分下面两种情况讨论,数组元素一个一个的看,遇到不符合要求的就直接改掉,相当于一个贪心。给你一个整数数组nums,每次操作会从中选择一个元素并将该元素的值减少1。如果符合下列情况之一,则数组A就是锯齿数组:每个偶数索引对应的...原创 2019-08-07 21:30:20 · 808 阅读 · 0 评论 -
1145. 二叉树着色游戏
题目描述有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中,给出二叉树的根节点root,树上总共有n个节点,且n为奇数,其中每个节点上的值从1到n各不相同。游戏从「一号」玩家开始(「一号」玩家为红色,「二号」玩家为蓝色),最开始时,「一号」玩家从[1, n]中取一个值x(1 <= x <= n);「二号」玩家也从[1, n]中取一个值...原创 2019-08-07 22:11:52 · 525 阅读 · 0 评论 -
北大信科夏令营机考题分类汇总
巧妙的方法1. 护林员盖房子(2019信科研究生上机测试)这个题目与leetcode85题为一题。利用了一个很玄妙的栈。#include <iostream>#include<string>#include <algorithm>#include <vector>#include<math.h>#include&...原创 2019-07-14 20:20:35 · 4192 阅读 · 4 评论 -
算法笔记:从极端情况到目标情况的优化求解
最近心情是非常沉郁啊,南大面试真是搞我心态。哎,也没啥好抱怨的,写篇博客舒缓一下心情,总结总结经验之后继续面吧。这篇博客的灵感是来自于在论文中实际应用的一个算法,最开始面对我要求解的问题的时候,算法的时间复杂度令我非常的绝望,是一个指数的算法复杂度。后来在做启发式的算法的时候,偶然发现,这个问题竟然可以在线性时间内求解,感觉非常的惊喜,算法确实是一个很奇妙的东西。在这篇博客中,我首先会通过...原创 2019-06-12 20:21:58 · 350 阅读 · 0 评论 -
算法笔记:桶排序
今天做leetcode 164最大间距的时候,看到这种具有线性时间复杂度的排序方法。第一次看这个算法,真是惊掉了下巴,排序算法还真是博大精深啊,之前我的博客也总结了不少排序算法,自认为对排序也算是略懂一点,没想到还是不断有经典常用的排序算法刷新我对排序算法的认识。桶排序,简单来说,就是一种用空间换时间的排序的方法,我们通过多放置“桶”,扫描需要排序的数组的时候把元素放到对应的桶中,之后对于每个...原创 2019-05-07 22:04:51 · 233 阅读 · 0 评论 -
算法笔记:优先权队列
优先权队列Stack. Remove the item most recently added.Queue. Remove the item least recently added.Randomized queue. Remove a random item.Priority queue. Remove the largest (or smallest) item优先权队列,...原创 2019-04-17 19:01:25 · 1381 阅读 · 0 评论 -
算法笔记:快速排序(Quick Sort)
一. 快排的基本思路1. 给数组洗牌。(为什么要先让数组随机排列后续会讲)2. 选择一个元素a[j]。如果数组是要从小到大排序,那么我们把所有小于a[j]的元素放到a[j]左侧,把所有大于a[j]的元素放到a[j]的右侧。3. 对a[j]的左侧和右侧分别排序。二. 具体实现1. 如何实现上述第二项中的要求?Repeat until i and j pointers cros...原创 2019-04-15 21:35:02 · 889 阅读 · 0 评论 -
算法笔记:归并排序(Merge Sort)
基本思路1. 把数组分成两部分。2. 递归地排序这两个数组。3. 将数组的两部分合并。目标与实现代码目标:Given two sorted subarrays a[lo] to a[mid] and a[mid+1] to a[hi], replace with sorted subarray a[lo] to a[hi]private static void...原创 2019-04-09 09:53:30 · 2948 阅读 · 0 评论 -
数据结构计算相关整理
原创 2018-01-10 10:28:02 · 269 阅读 · 1 评论 -
CCF 碰撞的小球
问题描述试题编号: 201803-2 试题名称: 碰撞的小球 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处。有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒。 当小球到...原创 2018-09-08 17:19:09 · 262 阅读 · 1 评论 -
CCF URL映射
这题是魔鬼吗?这么麻烦,只给了我40分(╥╯^╰╥)问题描述试题编号: 201803-3 试题名称: URL映射 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 URL 映射是诸如 Django、Ruby on Rails 等网页框架 (web frameworks) 的一个重要组件。对于从浏览器发来...原创 2018-09-14 20:44:00 · 305 阅读 · 1 评论 -
CCF 201812-4:数据中心
试题编号: 201812-4 试题名称: 数据中心 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 样例输入 4 5 1 1 2 3 1 3 4 1 4 5 2 3 8 3 4 2 样例输出 4 样例说明 下图是样例说明。 ...原创 2019-02-21 20:00:17 · 281 阅读 · 0 评论 -
Leetcode 785. 判断二分图
题目描述给定一个无向图graph,当这个图为二分图时返回true。如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[...原创 2019-02-22 20:39:02 · 391 阅读 · 0 评论 -
leetcode 684. 冗余链接 802. 找到最终的安全状态
在本问题中, 树指的是一个连通且无环的无向图。输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, ..., N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间,这条附加的边不属于树中已存在的边。结果图是一个以边组成的二维数组。每一个边的元素是一对[u, v] ,满足 u < v,表示连接顶点u 和v的无向图的边。返回一条可以删去的边,使得结果图是一个有着N...原创 2019-02-23 18:19:53 · 311 阅读 · 0 评论 -
Leetcode 133. 克隆图
给定无向连通图中一个节点的引用,返回该图的深拷贝(克隆)。图中的每个节点都包含它的值 val(Int) 和其邻居的列表(list[Node])。示例:输入:{"$id":"1","neighbors":[{"$id":"2","neighbors":[{"$ref":"1"},{"$id":"3"原创 2019-02-25 20:47:26 · 273 阅读 · 0 评论 -
Leetcode 字符串处理问题两则
每次遇到字符串相关的问题,就会出项相当多次的提交错误。总是会因为读题,手残,逻辑漏洞忽略各种特殊情况,这样的问题难度一般不是很多,关键是要考虑周到,不要漏掉情况。394. 字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为...原创 2019-03-05 20:55:10 · 368 阅读 · 0 评论 -
算法笔记:并查集解决无向图的连通问题
背景对于一个无向图,我们希望判断两个节点之间是否是连通的,或者说,从点p到点q,是否存在一条路径。想要在大规模的图中快速判断两点是否连通,显然并不容易。应用的场景这里的节点可以代表很多具体的应用:1. 数字图片中的像素2. 在网络中的计算机3. 在社交网络上的用户4. 芯片上的晶体管5. 集合中的元素6. 程序的变量名并查集API并查集是一种树型的数...原创 2019-03-02 19:06:39 · 1971 阅读 · 0 评论 -
Leetcode 799. 香槟塔
我们把玻璃杯摆成金字塔的形状,其中第一层有1个玻璃杯,第二层有2个,依次类推到第100层,每个玻璃杯(250ml)将盛有香槟。从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)例如,在倾倒一杯香槟后,最顶层的玻璃杯满了。倾...原创 2019-03-02 19:13:19 · 885 阅读 · 0 评论 -
Leetcode 105. 从前序与中序遍历序列构造二叉树
题目根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder =[3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7题目分析根据一棵树的前序遍历和中序遍历情况画出该树,是离散...原创 2019-03-09 17:21:20 · 155 阅读 · 0 评论 -
CCF 201809-3 元素选择器(80分答案)
题目分析CCF的第三道题,一般考察的是模拟和文本处理,题目难度不大,但是相当繁琐。按照题目的要求做,需要仔细认真的读题。我使用的是ArrayList解题,看到网上各位大佬使用的方法都是用树作为数据结构,可能这是我代码繁琐和最后出错的原因。import java.io.BufferedReader;import java.io.InputStreamReader;import ja...原创 2019-03-11 20:20:04 · 389 阅读 · 0 评论 -
算法笔记:Java中的栈和队列
栈和队列是十分基本的数据结构,其基本方法和实现想必大家一定耳熟能详,因此,在这篇博文中,不会介绍栈和队列的基本知识,而是讲解其实现中我觉得比较重要和有意思的点。一. 大小调整(Resizing Arrays)关于栈和队列的实现,我们既可以使用链表实现,也可以使用数组实现。在使用数组实现的时候,一个十分重要的问题就是调整数组的大小。当数组分配的空间已经被占满,而我们要添加新的元素,这个时候我...原创 2019-04-04 23:12:29 · 267 阅读 · 0 评论 -
算法笔记:算法复杂度分析
什么是算法复杂度?维基百科:Incomputer science, theanalysis of algorithmsis the determination of thecomputational complexityof algorithms, that is the amount of time, storage and/or other resources necessary...原创 2019-04-03 21:35:30 · 1204 阅读 · 0 评论 -
算法笔记:元素排序
排序在算法中是十分重要的问题,本节主要讲解最基本的排序算法,包括选择排序,插入排序,希尔排序,最后会讲解一个排序的实际应用。一. 选择排序(Selection Sort)public class Selection{ public static void sort(Comparable[] a) { int N = a.length; for (int i = 0; i <...原创 2019-04-06 15:15:52 · 313 阅读 · 0 评论 -
数据结构部分考点整理
1.逻辑结构与物理结构逻辑结构:数据元素之间的逻辑关系称为数据的逻辑结构。例如线性表,栈,队列,树和图等等。物理结构(存储结构):数据结构在计算机中的表示。例如顺序存储,链式存储,索引存储,散列存储。2.顺序存储和链式存储的选择顺序存储和链式存储的选择要根据具体问题来判断。如果对数据的操作涉及较多的插入和删除,应选择链式存储结构。如果对数据的操作涉及较多的访问,应选择顺序存储结构。3.原创 2017-11-19 20:27:14 · 2425 阅读 · 4 评论