
算法日寄
学点算法
Coca1cole
~
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算数四则混合运算表达式求值
算数混合四则运算求值[问题]利用算符优先关系,实现对算术四则混合运算表达式的求值[要求]输入的形式:表达式,例如2*(3+4)包含的运算符只能有’+’ 、‘-’ 、‘*’ 、‘/’ 、‘(’、 ‘)’;输出的形式:运算结果,例如2*(3+4)=14;程序所能达到的功能:对表达式求值并输出思路:利用栈实现表达式求值,需要思考如下问题:算符的优先级字符转换成数字(包括解析小数)主要思路:算术表达式有三种类型:前缀,中缀,后缀表原创 2022-04-21 11:12:49 · 1918 阅读 · 47 评论 -
《手撕链表题系列-7》链表的回文结构
前言本系列主要讲解链表的经典题注:划重点!!必考~链表分割牛客链接:链表的回文结构_牛客题霸_牛客网 (nowcoder.com)题目描述:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。解题思路:这里我们先找到中间结点(使用快慢指针法) 快指针每次走两个结点的位置,慢指针每次走一个结点的位置 快指针走到结束位置原创 2021-11-01 00:02:32 · 458 阅读 · 3 评论 -
《算法基础学习》变量交换算法
算法学习《算法零基础100讲》(第16讲) 变量交换算法例题1:交换数字力扣链接:交换数字解题思路:一个数异或其他数两次还是该原数利用异或这一性质进行交换参考代码:/** * Note: The returned array must be malloced, assume caller calls free(). */int* swapNumbers(int* numbers, int numbersSize, int* returnSize){ number原创 2021-11-05 09:17:35 · 327 阅读 · 12 评论 -
《手撕数据结构经典题系列》用队列实现栈
用队列实现栈力扣链接:225. 用队列实现栈 - 力扣(LeetCode) (leetcode-cn.com)题目描述:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 fa原创 2021-11-14 09:14:22 · 1191 阅读 · 23 评论 -
《手撕链表题系列-6》链表分割
前言本系列主要讲解链表的经典题注:划重点!!必考~链表分割牛客链接:链表分割_牛客题霸_牛客网 (nowcoder.com)题目描述:现有一链表的头指针 ListNode*pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。解题思路:因为需要相对顺序不变,所以我们选择用尾插法要将小的放在前面,打的放在后面,这里我们可以选择使用两个链表一个链接小的结点,另一个链接大的结点,最后再将大.原创 2021-10-31 10:36:15 · 358 阅读 · 9 评论 -
《手撕链表题系列-8》相交链表
前言本系列主要讲解链表的经典题注:划重点!!必考~链表分割力扣链接:160. 相交链表 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。示例:提示:listA 中节点数目为 m listB 中节点数目为 n 0 <= m, n <= 3 * 104 1 <= Node.val &...原创 2021-11-02 08:20:37 · 330 阅读 · 20 评论 -
【剑指卷王】合并两个有序数组
题目:合并两个有序数组力扣链接:合并两个有序数组给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长...原创 2021-10-15 13:52:02 · 330 阅读 · 4 评论 -
《手撕链表题系列-5》合并两个有序链表
前言本系列主要讲解链表的经典题注:划重点!!必考~合并两个有序链表力扣链接:21. 合并两个有序链表 - 力扣(LeetCode) (leetcode-cn.com)题目描述:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的示例: 提示:两个链表的节点数目范围是[0, 50] -100 <= Node.val <= 100 l1和l2均按非递减顺序排列解题思路:如果是到原链表本身上...原创 2021-10-30 22:14:12 · 403 阅读 · 8 评论 -
【剑指卷王】字符串转换成整数(atoi)的模拟实现
字符串转换成整数(atoi)的模拟实现题目力扣链接:字符串转换整数 (atoi)请你来实现一个myAtoi(string s)函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)函数myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正 读入下一个字符,直到到达下一个非...原创 2021-10-12 14:57:52 · 295 阅读 · 19 评论 -
《手撕链表题系列-3》找到链表的中间结点
前言本系列主要讲解链表的经典题注:划重点!!必考~找到链表的中间结点力扣链接:876. 链表的中间结点 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给定一个头结点为head的非空单链表,返回链表的中间结点如果有两个中间结点,则返回第二个中间结点示例: 提示:给定链表的结点数介于1和100之间解题思路:一般的思路:一个个遍历,得到链表长度,在遍历链表长度的二分之一,就能得到中间结点高效思路:使用...原创 2021-10-29 09:02:52 · 157 阅读 · 2 评论 -
【剑指卷王】找单身狗
目录题目:找单身狗(简单)题目:找单身狗(复杂)题目:找单身狗(简单)力扣链接:面试题 17.04. 消失的数字给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可原创 2021-10-15 14:26:51 · 337 阅读 · 14 评论 -
分橘子问题-日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子...
题目描述父亲将2520个桔子分给六个儿子。分完后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?解题思路:最后橘子一样多,我们可知最后每个人手上的橘子个数根据原先的橘子数量和给下一个儿子橘子的数量间存在一定关系进行求解注意:大儿的情况原创 2021-10-29 23:17:06 · 5773 阅读 · 12 评论 -
《手撕链表题系列-1》删除链表中等于给定值 val 的所有节点
前言本系列主要讲解链表的经典题注:划重点!!必考~删除链表中等于给定值 val 的所有节点力扣链接:203. 移除链表元素给你一个链表的头节点head和一个整数val,请你删除链表中所有满足Node.val == val的节点,并返回新的头节点示例: 提示:列表中的节点数目在范围[0, 104]内 1 <= Node.val <= 50 0 <= val <= 50解题思路:这里我们选择使用尾插法,遍历链表把不...原创 2021-10-27 20:13:03 · 371 阅读 · 0 评论 -
《手撕链表题系列-2》反转链表
前言本系列主要讲解链表的经典题注:划重点!!必考~反转链表力扣链接:206. 反转链表 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给你单链表的头节点head,请你反转链表,并返回反转后的链表示例:提示:链表中节点的数目范围是[0, 5000] -5000 <= Node.val <= 5000解题思路:这里我们采用三指针进行反转链表:指针cur进行遍历链表 指针next记录cur的下一个指针,防...原创 2021-10-27 20:30:51 · 280 阅读 · 6 评论 -
《手撕数据结构经典题系列》有效括号问题
题目:有效括号力扣链接:20. 有效的括号 - 力扣(LeetCode) (leetcode-cn.com)题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:提示:1 <= s.length <= 104 s仅由括号'()[]{}'组成解题思路:这里我们使用栈来解决(先入后出的性质 )...原创 2021-11-06 18:53:21 · 1011 阅读 · 15 评论 -
《手撕链表题系列-4》链表中倒数第k个结点
前言本系列主要讲解链表的经典题注:划重点!!必考~找到链表的中间结点牛客链接:链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)题目描述:输入一个链表,输出该链表中倒数第k个结点示例: 解题思路:一般思路:遍历链表两次高效思路:使用两个指针 快指针先走k步 慢指针再与快指针一起走 当快指针走完时,慢指针走到倒数第k个结点注意:k的大小可能超过链表长度这一特殊情况注:这里我们来实现高效思路参考代码:/** *原创 2021-10-29 09:04:24 · 211 阅读 · 15 评论 -
【面试智力题】1000!有几位数,为什么?
问题描述1000!有几位数,为什么?解答思路设一个数为X,用科学计数法表示为X=a*10^b,其中1<a<10,b为整数,则X有1+b位数示例:1995=1.995* 10^3,有1+3=4位数 56789=5.6789*10^4,有1+4=5位数。其中3,4是通过取对数的整数部分获得,lg(1995)的整数部分是3,lg(56789)的整数部分是4求1000!有几位,此问题转化成求lg(1000!)+1的值lg(1000!)=lg(1000*999…*1)=.原创 2021-10-07 09:10:44 · 406 阅读 · 5 评论 -
【面试智力题】有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?
问题描述有7克、2克砝码各一个,天平一只,如何只用这些物品三次将140克的盐分成50、90克各一份?解法一第一次:2+7—>称9g盐第二次:9+7—>称16g盐第三次:16+7—>称25g盐将3次称的放在一起为50g,剩下的就是90g解法二第一次:将140g盐平分在天平两边,一边各70g盐第二次:将其中一份70g盐平分在天平两边,一边各35g盐第三次:取其中一份35g盐,配出20g和15g盐,20+2<------>15+7把15g盐和第二次原创 2021-10-08 15:20:06 · 2311 阅读 · 11 评论 -
【面试智力题】你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1,只称量一次,如何判断哪个罐子的药被污染了?
问题描述你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1,只称量一次,如何判断哪个罐子的药被污染了?解答思路设未被污染的每个药丸的重量是x,则被污染的每个药丸的重量是x+1。将4个罐子分别标注为1,2、3、4,取一号罐子1个药丸,二号罐子2个药丸,三号罐子3个药丸,四号罐子4个药丸,一起称重则:若一号罐子药丸被污染,则重量为(10x+1)若二号罐子药丸被污染,则重量为(10x+2)若三号罐子药丸被污染,则重量为(10x+3)若四号罐子药丸被污染,则.原创 2021-10-07 09:14:23 · 2753 阅读 · 5 评论 -
【 面试智力题 】你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
问题描述你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?思路工人在拥有金条时可以找零解答把金条分成1/7,2/7,4/7长度的金条三份第一天:给工人1/7第二天:给工人2/7,换回1/7第三天:给工人1/7第四天:给工人4/7,换回1/7和2/7第五天:给工人1/7第六天:给工人2/7,换1/7第七天:给工人1/7刚好7天分配均匀...原创 2021-10-07 08:58:50 · 1060 阅读 · 1 评论 -
【面试智力题】3ml 5ml 杯子各一个,拼出 4ml 的容量
问题描述3ml 5ml 杯子各一个,两个杯子没有刻度,只知道最大容量,并且不能借助其它容器,拼出 4ml 的容量思路凑配问题解法一将3ml杯子装满水倒入5ml杯子,此时5ml杯中有3ml水 重复步骤一,此时3ml杯中剩1ml水,5ml杯中有5ml水 将5ml杯子中的水倒出去,此时5ml杯中没有水 将3ml杯中的1ml水倒入5ml杯中,此时5ml杯中有1ml水 把3ml杯子倒满,倒入5ml杯中,此时5ml杯中有1ml+3ml=4ml水解法二将5ml杯子装满原创 2021-10-07 08:59:29 · 607 阅读 · 2 评论 -
⭐️ 面试智力题 ⭐️小鼠测毒(有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?)
题目有 1000 瓶药物,但是其中有一瓶是有毒的,老鼠只要服用任意量有毒药水就会在一个星期内死掉!请问,在一个星期后找出有毒的药物,最少需要多少只小白鼠?tip:小鼠可以多次喝药水 涉及对bit位的灵活运用(正确解题)解答先对药物进行编号1-1000因为1000<2^10=1024,将编号转换成2进制1000瓶全都编号完则需要10个比特位,每个比特位对应一只编号小鼠如果是1,则对应的比特位的小鼠喝药品,为0则对应小鼠不喝药品如下:1 -> 00000 00001原创 2021-08-12 20:15:10 · 1061 阅读 · 2 评论 -
【面试智力题】烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
问题描述烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?解答思路一共需要3条绳子,设为A,B,C1.A从一头开始烧,B从两头开始烧,B烧完了,共计30分钟2.等B烧完了,把A的另一头也点燃,A烧完了,共计15分钟3.等A、B都烧完了,C从两头开始烧,C烧完了,共计30分钟共计:30+15+30=1小时15分钟...原创 2021-10-07 09:06:08 · 1426 阅读 · 1 评论 -
【面试智力题】一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,怎样拿到最大的一颗?
问题描述一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?解答思路开放性试题,没有固定答案1.37%法则:先放弃前37%(1/e)的钻石,此后选择比前37%都大的第一颗钻石。注意这个策略只是以最大的概率获得最大的那颗钻石,并不考虑第二大的钻石和最小钻石的区别。2.前5层不拿,仅观察,然后再判断后面钻石的大小,如果遇到比前5层大的钻石就拿,否则就拿最后一颗钻石。3.先拿一楼钻石,然后再.原创 2021-10-07 09:03:20 · 2957 阅读 · 0 评论 -
《算法基础学习》进制转换(入门)
目录算法学习《算法零基础100讲》(第19讲) 进制转换(一) - 入门_英雄哪里出来-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977习题解题报告例题1例题2例题3例题4例题5例题6例题7算法学习《算法零基础100讲》(第19讲) 进制转换(一) - 入门_英雄哪里出来-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/arti原创 2021-11-08 15:03:34 · 2073 阅读 · 34 评论