算法
Style_月月
越努力,越幸运
展开
-
swift算法:反转字符串
1、描述编写一个函数,其作用是将输入的字符串反转过来,输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解决这一问题你可以假设数组中的所有字符都是ASCII码表中的可打印字符。2、算法思想:第一个和最后一个交换,依次类推func reverseString(_ s : inout [Stri...原创 2019-08-01 10:59:22 · 1601 阅读 · 0 评论 -
swift算法:Nim游戏
1、描述你和你的朋友,两个人一起玩Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1- 3块石头,拿掉最后一个石头的人就是获胜者。你作为先手你们是聪明人,每一步都是最优解,编写一个函数,来判断你是否可以在给定石头数量的情况下赢得比赛。例:输入:4 输出:false 解释:如果堆中有4块石头,那么你永远不会赢得比赛;因为无论你拿走1块、2块还是3块石头...原创 2019-08-01 10:28:32 · 285 阅读 · 0 评论 -
swift算法:存在重复元素
1、描述给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回true。如果数组中每个元素都不相同,则返回false。例1:输入:[1, 2, 3, 1] 输出:true例2:输入:[1, 2, 3, 4] 输出:false例3:输入:[1, 1, 1, 3, 3, 4, 3, 2, 4, 2] ...原创 2019-07-23 09:27:48 · 1065 阅读 · 0 评论 -
swift算法:除自身以外数组的乘积
1、描述给定长度为n的整数数组nums,其中n>1,返回输出数组 output,其中output[i] 等于nums中除 nums[i] 之外其余各元素的乘积。说明:请不要使用除法,且在O(n)时间复杂度内完成实例:输入:[1, 2, 3, 4] 输出:[24, 12, 8, 6]2、算法思想:上三角、下三角,乘积 = 当前数左边的乘积 *...原创 2019-07-31 10:49:47 · 388 阅读 · 0 评论 -
swift算法:二叉搜索树的最近公共祖先
1、描述给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个结点p、q,最近公共祖先表示为一个结点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)”。例如,给定如下二叉搜索树:root = [6, 2, 8, 0, 4, 7, 9, null, null, 3, 5]例1:输入:root = [6...原创 2019-07-26 10:30:00 · 427 阅读 · 0 评论 -
swift算法:数组中的第k个最大元素
1、描述在未排序的数组中找到第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 输出:42、算法1)、排序思想:先对数组进行排序,再返...原创 2019-07-22 11:09:00 · 472 阅读 · 0 评论 -
swift算法:2的幂
1、描述给定一个整数,编写一个函数来判断它是否是2的幂次方例1:输入:1 输出:true 解释:2^0 = 1例2:输入:16 输出:true 解释:2^4 = 16例3:输入:218 输出:false2、算法1)二进制思想:1、数字n若是2的次方,则一...原创 2019-07-25 09:57:48 · 1069 阅读 · 0 评论 -
swift算法:删除链表中的节点
1、描述请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。说明:1)链表至少包含两个节点 2)链表中所有节点的值都是唯一的 3)给定的节点为非末尾节点并且一定是链表中的一个有效节点 4)不要从你的函数中返回任何结果现有一个链表--head = [4, 5, 1, 9],...原创 2019-07-30 09:50:39 · 439 阅读 · 0 评论 -
swift算法:相交链表
1、描述编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点c1开始相交注意: 1)如果两个链表没有交点,返回 null.2)在返回结果后,两个链表仍须保持原有的结构。3)可假定整个链表结构中没有循环。4)程序尽量满足 O(n) 时间复杂度,且仅用 O(1) 内存。2、算法思想:双指针根据题目意思 如果两个链表相交,那么相...原创 2019-07-17 10:41:35 · 378 阅读 · 0 评论 -
swift算法:二叉搜索树中第K小的元素
1、描述给定一个二叉搜索树,编写一个函数kthSmallest 来查找其中第k个最小的元素。说明:你可以假设k总是有效的,1<=k<=二叉搜索树元素个数例1:输入:root = [3, 1, 4, null, 2], k = 1 输出:1例2:输入:root = [5, 3, 6, 2, 4, null, null, 1] , k = 3...原创 2019-07-24 10:15:09 · 325 阅读 · 0 评论 -
swift算法:反转链表
1、描述反转一个单链表例:输入:1->2->3->4->5->null 输出:5->4->3->2->1->null2、算法1)迭代思想:假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。 在遍历列表时,将当前节点的 ne...原创 2019-07-19 09:45:03 · 728 阅读 · 0 评论 -
swift算法:LRU缓存机制
1、描述运用你所掌握的数据结构,设计和实现一个 LRU(最近最少使用)缓存机制,它应该支持一下操作:获取数据 get 和写入数据 put。获取数据 get(key) --如果密钥(key)存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value)--如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据...原创 2019-07-12 11:00:12 · 756 阅读 · 0 评论 -
swift算法:最小栈
1、描述设计一个支持push、pop、top操作,并且能在常数时间内检索到最小元素的栈。 push(x) --- 将元素 x 推入栈中 pop() --- 删除栈顶的元素 top() --- 获取栈顶的元素 getMin() --- 检索栈中的最小元素例1:var minStack = MinStack....原创 2019-07-16 09:54:48 · 282 阅读 · 0 评论 -
swift算法:求众数
1、描述给定一个大小为n的数组,找到其中的众数。众数是指在数组中出现次数大于的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。例1:输入:[3, 2, 3] 输出:3例2:输入:[2, 2, 1, 1, 1, 2, 2] 输出:22、算法1)哈希表思想:利用字典存储每个数字出现的次数,最后取出每个数字的字...原创 2019-07-18 10:16:40 · 323 阅读 · 0 评论 -
swift算法:环形链表II
1、描述给定一个链表,返回链表开始入环的第一个节点,如果链表无环,则返回null。为了表示给定链表中的环,我们使用整数pos 来表示链表尾连接到链表中的位置(索引从0开始)。如果pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表例1:输入:head = [3, 2, 0, -4] pos = 1 输出:true 解释:链表...原创 2019-07-11 09:47:13 · 393 阅读 · 0 评论 -
swift算法:排序链表
1、描述在O(nlogn)时间复杂度和常数级空间复杂度下,对链表进行排序。例1:输入:4 -> 2 -> 1-> 3 输出:1 -> 2 -> 3 -> 4例2:输入:-1 -> 5 -> 3 ->4 -> 0 输出:-1 -> 0 -> 3 -> 4 -> ...原创 2019-07-15 09:48:50 · 397 阅读 · 0 评论 -
swift算法:买卖股票的最佳时机II
1、描述给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润,你可以尽可能的完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。例1:输入:[7, 1, 5, 3, 6, 4] 输出:7 解释:在第2天(股票价格=1)的时候买入,在第3天(股...原创 2019-07-05 11:23:55 · 491 阅读 · 0 评论 -
swift算法:搜索旋转排序数组
1、描述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。例如 :数组[0, 1, 2, 4, 5, 6, 7] 可能变为 [4, 5, 6, 7, 0, 1, 2]。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复元素,你的算法时间复杂度必须是O(logn)级别。例1:输入:nums = [4, 5, 6, 7, 0,...原创 2019-06-05 16:08:42 · 250 阅读 · 0 评论 -
swift算法:删除排序数组中的重复项
1、描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度不要使用额外的空间,你必须在原地修改输入数组并使用O(1)额外空间的条件下完成例1:给定数组 nums = [1, 1, 2] 函数应该返回新长度2,并且原数组 nums 的前两个元素被修改为 1, 2 注:不需要考虑数组中超出新长度后面的...原创 2019-05-30 17:18:01 · 665 阅读 · 0 评论 -
swift算法:合并k个排序链表
1、描述合并k个排序链表,返回合并后的排序链表例:输入:[1->4->5, 1->3->4, 2->6] 输出:1->1->2->3->4->4->5->62、实现1)懒方法将链表的值往一个数组里放,并将数组排序,最后再转换成链表func mergeKLists(_ lists...原创 2019-05-30 15:31:59 · 294 阅读 · 0 评论 -
swift算法:有效的括号
一、描述给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串例1:输入:"()" 输出:true例2:输入:"()[]{}" 输出:true例3:输入:"(]" ...原创 2019-05-27 10:46:22 · 572 阅读 · 0 评论 -
swift算法:三数之和
描述:给定一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0 ?找出所有满足条件且不重复的三元组注意:答案中不可以包含重复的三元组例:给定数组 nums=[-1, 0, 1, 2, -1, -4] 满足要求的三元集合为:[[-1, 0, 1], [-1, -1, 2]]一、暴力法思路:数组先从小到大的顺序排序,然后...原创 2019-05-22 17:57:06 · 488 阅读 · 0 评论 -
swift算法:回文数
描述:判断一个整数是否是回文数,回文数是指正序(从左往右)和倒序(从右往左)读都是一样的整数例1:输入:121 输出:true例2:输入:-121 输出:false 解释:从左往右读 为 -121,从右往左读 为 121-,所以不是一个回文数例3:输入:10 输出:false ...原创 2019-05-17 09:57:08 · 562 阅读 · 0 评论 -
swift算法:最长公共前缀
描述:编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串""注:所有输入只包含小写字母a-z例1:输入:["flower","flow","flight"] 输出:"fl"例2:输入:["dog", "racecar","car"] 输出:"" 解释:输入不存在公共前缀一、水平扫描法...原创 2019-05-22 09:46:08 · 327 阅读 · 0 评论 -
swift算法:字符串转换整数
描述:请你来实现一个atoi函数,使其能将字符串转换成整数注意:1)函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止 2)如果寻找到的第一个非空字符为正/负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正/负号 3)如果寻找到的第一个字符是数字,则直接将其与之连续的数字字符组合起来,形成整数 ...原创 2019-05-16 17:27:06 · 1621 阅读 · 0 评论 -
swift算法:最接近的三数之和
描述:给定一个包括n个整数的数组nums 和一个目标值 target,找出nums 中的三个整数,使得它们的和与target最接近,返回这三个数的和,嘉定每组输入只存在唯一答案例: 给定数组 nums = [-1, 2, 1, -4],和target = 1 与target最接近的三个数的和为 2, (-1+2+1 = 2)思路:与求三个数之和为0思路...原创 2019-05-24 15:45:40 · 300 阅读 · 0 评论 -
swift算法:整数反转
描述:给出一个32位的有符号整数,你需要将这个整数中美位上的数字进行反转例1:输入:123 输出:321例2:输入:-123 输出:-321例3:输入:120 输出:21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1] 即 [-2147483648,2147483647]。请根据这个假设,如果反...原创 2019-05-15 16:07:28 · 566 阅读 · 0 评论 -
swift算法:盛最多水的容器
描述:给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能...原创 2019-05-20 15:54:52 · 239 阅读 · 0 评论 -
swift算法:给出一个字符串,要求将其按照单词顺序进行反转
Google面试题目:给出一个字符串,要求将其按照单词顺序进行反转例如:原字符串:"the sky is blue" 反转后的字符串:"blue is the sky"需要注意的点:1)每个单词的长度不一2)空格需要特殊处理思路:1)先整体将字符串反转 即"the sky is blue"-->"eulb si yks eh...原创 2019-05-07 20:23:23 · 688 阅读 · 0 评论 -
swift算法:最长回文子串
描述:给定一个字符串s,找到s中最长的回文子串,你可以假设s的最大长度是1000例1:输入:"babad" 输出:"bab" 注意:“aba”也是一个有效答案例2:输入:"cbbd" 输出:"bb"什么是回文字符串?答:如果一个字符串正着读和反着读诗一样的,那么这个字符串就是回文字符串1、中心扩展法...原创 2019-05-14 16:30:08 · 525 阅读 · 0 评论 -
swift算法:2sum 算法
题目描述:给出一个整数数组和一个目标值,判断数组中是否有两个数之和等于目标值1、粗暴的方法每次选中一个数,然后遍历整个数组,判断是否有另一个数使两者之和为target时间复杂度:O(n^2)2、利用集合可以优化时间复杂度思路:在遍历数组的过程中,用集合每次保存当前值。假如集合中已经有一个数等于目标值减去当前当前值,则证明在之前的遍历中一定有一个数与当前值之和等于目标值...原创 2019-05-06 21:00:43 · 539 阅读 · 0 评论 -
swift算法:两数相加
题目描述:给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例: 输入 (2->4->3)+(5->6->4) 输出 (7->0-...原创 2019-05-06 21:01:04 · 663 阅读 · 0 评论 -
swift算法:合并两个有序链表
1、描述将两个有序链表合并为一个新的有序链表并返回,新链表是通过拼接给定的两个链表的所有节点组成的例:输入:1->2->4,1->3->4 输出:1->1->2->3->4->42、算法思想:迭代/递归解法1)类似归并排序的合并过程,通过遍历链表比较大小,生成新链表的有序排列,多出来的部分直接加入新链表...原创 2019-05-29 14:42:40 · 431 阅读 · 0 评论 -
swift算法:最大子序和
1、描述给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。例1:输入:[-2, 3, -1, 1, -3] 输出:3 解释:连续子数组 [3, -1, 1] 的和最大,为3例2:输入:[-2, 1, -3, 4, -1, 2, 1, -5, 4] 输出:6 ...原创 2019-06-20 14:12:55 · 374 阅读 · 0 评论 -
swift算法:环形链表
1、描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从0开始)。如果 pos 是 -1, 则在该链表中没有环。例1:输入:head = [3, 2, 0, -4] pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个结点例2:输入:head ...原创 2019-07-10 09:52:57 · 427 阅读 · 3 评论 -
swift算法:买卖股票的最佳时机
1、描述给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。例1:输入:[7, 1, 5, 3, 6, 4] 输出:5 解释:在第二天(股票价格=1)的时候买入,在第五天(股票价格=6)的时候卖出,最大利润 =...原创 2019-07-04 10:20:23 · 350 阅读 · 0 评论 -
swift算法:子集
1、描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集例:输入:nums = [1, 2, 3] 输出:[ [3], [1], [2], [1, 2, 3], [1, 3], [2, 3], [1, 2], [] ]2、算法1)二进制位思想:集合的每个元素,都有可以选或不选,用二进制和位运...原创 2019-06-28 10:49:27 · 641 阅读 · 0 评论 -
swift算法:只出现一次的数字
1、描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次,找出那个只出现一次的元素。例1:输入:[2, 2, 1] 输出:1例2:输入:[4, 1, 2, 1, 2] 输出:42、算法1)利用数组思想:利用数组,遍历nums中的每一个元素,如果是新出现则加入数组,如果已经在列表则删除时间复杂度:O...原创 2019-07-09 09:25:34 · 281 阅读 · 0 评论 -
swift算法:二叉树的最大深度
1、描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明:叶子节点是指没有子节点的节点例1:给定二叉树 [3, 9, 20, nil, nil, 15, 7] 返回它的最大深度 3例1:给定二叉树 [1, 2, 7, 3, nil, nil,4, 5, 6] ...原创 2019-07-03 14:17:13 · 544 阅读 · 0 评论 -
swift算法:爬楼梯
1、描述假设你正在爬楼梯,需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。例1:输入:2 输出:2 解释:有两种方法可以爬到楼顶 1)1 阶 + 1 阶 2)2 阶例2:输...原创 2019-06-27 16:38:26 · 429 阅读 · 0 评论