![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据算法
文章平均质量分 81
Wu_Candy
这个作者很懒,什么都没留下…
展开
-
位运算算法
今天主要想分享的是自己在面试过程中遇见的一道面试题,是一道简单的算法题。在面试的过程中,我使用了 hash 表来解决的(时间复杂度和空间复杂度都是O(n)),但是面试官不满意,当时也实在没想到别的解法。后来在慢慢的使用位运算的过程中,发现通过位运算,可以让时间复杂度为O(n),空间复杂度为O(1)的解法。那么先看下题目吧。一、面试题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。【leetcode 136. 只出现一次的数字】原创 2022-03-04 18:16:03 · 591 阅读 · 0 评论 -
一文读懂快速排序
今天主要介绍下快速排序算法是如何实现的,主要的目标是:等很久之后忘了快速排序的思想时,找到这篇文章就可以帮助你很快的理解和回忆起来。1.执行流程 1.从序列中选择一个轴点元素pivot从最后一个元素向前遍历 我们的策略是:每次选择第0位置的元素为轴点元素 2.利用pivot将数组分割成2个子数组 将小于pivot的元素放在pivot的左侧 将大于pivot的元素放在pivot的右侧 将等于pivot的元素放在pivot的哪侧.原创 2021-06-22 15:07:49 · 166 阅读 · 0 评论 -
老鼠和毒药的问题
今天分享一道很有意思的问题。题目: 有1000只一模一样的瓶子,编号1-1000。其中999瓶是水,一瓶是看起来像水的毒药。只要老鼠喝下一小口毒药,一天后则死亡。现在,你有7只老鼠和一天的时间,如何检验出哪个号码瓶子里是毒药?答案:根据2^10=1024,所以10个老鼠可以确定1000个瓶子具体哪个瓶子有毒。先将数据规模变小,有8只一模一样的瓶子,其中有一只瓶子是毒药。现在最少需要几只老鼠可以检验出第几瓶才是毒药?具体实现跟3个老鼠确定8个瓶子原理一样。 ...原创 2021-05-21 15:49:13 · 927 阅读 · 7 评论 -
基础算法:求目标值 &字符串反转
第1题给出一个整型数组和一个目标值,判断数组中是否有2个数之和等于目标值,若有就返回true,否则返回false。解法:方案一:如果2层for循环暴力解题,O(n*n)不是我们想要的解法方案二:采用集合可以优化时间复杂度,即在遍历数组的过程中,用集合每次保存当前的值。假如集合中已经有了一个数等于目标值减去当前值,则证明在之前的遍历中一定有一个数与当前值之和等于目标值。这种方法的时间复杂度是O(n). func twosums(target: Int, nums: [Int..原创 2021-05-20 10:32:53 · 162 阅读 · 0 评论 -
算法计算出股票最佳交易时间点
第一题题目描述: 给定一段时间内每天的股票价格,已知你只可以买卖各一次,求最大的收益。输入输出样例: 输入一个一维整数数组,表示每天的股票价格;输出一个整数,表示最大的收益。Input:[7,1,5,3,6,4] Output:5 在这个样例中,最大的利润为在第二天价格为 1 时买入,在第五天价格为 6 时卖出。题解: 我们可以遍历一遍数组,在每一个位置 i 时,记录 i 位置之前所有价格中的最低价格,然后 将当前的价格作为售出价格...原创 2021-05-19 18:14:01 · 7713 阅读 · 8 评论 -
有趣的算法题~单调栈
在刷 LeetCode 的时候,每次遇到精彩的题解都会感叹数据结构的伟大,通过巧妙地设计,能够非常清晰明了的解决问题。什么是单调栈单调栈分为单调递增栈和单调递减栈,单调递增栈即栈内元素保持单调递增的栈,同理单调递减栈即栈内元素保持单调递减的栈,跟单调队列差不多,但是只用到它的一端,利用它可以用来解决一些 ACM/ICPC 和 OI 的题目,如 RQNOJ 的诺的队列等【来源于百度百科的定义】作用可以以 O(1) 的时间复杂度得知某个位置左右两侧比他大(或小)的数的位置,当你需要高..原创 2021-04-20 16:06:22 · 200 阅读 · 0 评论 -
令人头大的字符串—算法处理
引言:字符串可以看成是字符组成的数组。由于字符串是程序里经常需要处理的数据类型,因此有很多针对字符串处理的题目,以下是一些常见的类型。第一题:第一个只出现一次的字符题解: 遍历字符串数组 然后运用字典的特性,其中,key 为 character, value 为 character 出现的次数【比如 a 为 key,则 map[a] == 2】 最后返回 value == 1的 key 即是答案 code: func firstUni...原创 2021-04-20 16:02:44 · 245 阅读 · 7 评论 -
双指针—滑动窗口算法解析
题目描述题解滑动窗口的思想:用i,j表示滑动窗口的左边界和右边界,通过改变i,j来扩展和收缩滑动窗口,可以想象成一个窗口在字符串上游走,当这个窗口包含的元素满足条件,即包含字符串T的所有元素,记录下这个滑动窗口的长度j-i+1,这些长度中的最小值就是要求的结果。步骤一不断增加j使滑动窗口增大,直到窗口包含了T的所有元素步骤二不断增加i使滑动窗口缩小,因为是要求最小字串,所以将不必要的元素排除在外,使长度减小,直到碰到一个必须包含的元素,这个时候不能再扔了,再...原创 2021-04-01 17:28:12 · 330 阅读 · 0 评论 -
百度、阿里、腾讯、京东等面试算法题
今天给大家分享的是字符串相关的算法面试题。现在进大厂,都会有算法面试题,不过因为算法和数据结构是有一定门槛的,所以想迈过这个门槛,慢慢积累然后反复看是一个可行的策略。这个问题是Leetcode上的第151 道题:翻转字符串里的单词这道题目的解题思路: 清除字符串中无用的空格, 【将 "are you ok" 整理成 “are you ok”】 然后将处理好的字符串进行翻转,【将 " are you ok " 整理成 “ko uoy era”】 分别将每个单词...原创 2021-01-24 17:28:20 · 389 阅读 · 0 评论 -
哈希表(Hash Tabel)
面试的时候,曾被问过:你知道字典的底层数据结构是什么吗? 那我们今天主要讲的就是哈希表这种数据结构到底是什么样子的;哈希碰撞是怎么造成的以及是如何解决哈希碰撞的。1.定义 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做哈希表。 字典存值案例如下代码。为了能比较通俗的理解哈希表这种数据结构,我们先看下图:p原创 2021-01-02 15:47:58 · 244 阅读 · 0 评论 -
数据结构与算法 —— 归并排序
今天讲的内容是归并排序,为了比较容易的理解归并排序,我们首先看一道leetcode的算法题,通过该题的解题思路,会让我们更加容易的理解归并排序的思想。开篇问题 这个题的解题思路其实就是归并排序的merge的过程。首先让我们先解这道题,便于后面更好的理解归并排序的思想。 首先我绘制了一张图,接下来我们通过上图来理解这道题的解题思路。 在开始之前,我先解释下上图的变量的含义:我们定义一个数组array = nums1 + nums2,然后定义指针T指向nums1的...原创 2020-11-27 14:51:19 · 210 阅读 · 0 评论 -
数据结构-二叉搜索树
思考 在n个动态的整数中搜索某个整数?(查看其是否存在) 假设使用动态数组存放元素,从第 0 个位置开始遍历搜索,平均时间复杂度:O(n)。如果维护一个有序的动态数组,使用二分搜索,最坏时间复杂度:O(logn) 但是添加、删除的平均时间复杂度是 O(n) 针对这个需求,有没有更好的方案? 今天我们主要讲的就是二叉搜索树,使用二叉搜索树,添加、删除、搜索的最坏时间复杂度均可优化至:O(logn)。概念 树是一种数据结构,比如二叉树、B树、红黑树等等,也有3叉树等等。但是..原创 2020-11-26 17:56:24 · 395 阅读 · 0 评论 -
leetcode 递归编程技巧-链表算法题
# leetcode 递归编程技巧-链表算法题 今天主要想分享2个小<font color=#FFA500>Tip</font>:1. 快慢指针的<font color=#FFA500>类比</font>理解2. 谈谈<font color=#FFA500>递归</font>编程技巧,以及我自己是怎么理解并运用它的。##开篇问题1:leetcode 141:<font color=#FFA500>.原创 2020-11-08 16:09:33 · 773 阅读 · 2 评论