随笔分类 - 算法与数据结构
摘要:题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路: 从题目得出的信息: 相对位置不变 >保持稳定性;奇数位于前面,偶数位于后面 >需要判断,移动元素位置; 这些都和
阅读全文
摘要:题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 比如n=3时,2*3的矩形块有3种覆盖方法: 思路: (1)当 n < 1时,显然不需要用2*1块覆盖,按照题目提示应该返回 0。 (2)当 n = 1时,只存
阅读全文
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路:因为n级台阶,第一步有n种跳法:跳1级、跳2级、到跳n级 跳1级,剩下n-1级,则剩下跳法是f(n-1) 跳2级,剩下n-2级,则剩下跳法是f(n-2) 所以f(n)=f(
阅读全文
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: (1)我
阅读全文
摘要:牛客网: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39 解题思路:这里如果用递归的话时间复杂度和空间复杂度都会很高 function Fibonacci(n){ if(n == 0 || n == 1) { return n }
阅读全文
摘要:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:由于栈是后进先出,所以先依次进入栈1,再从栈1依次弹出到栈2,这样栈1和栈2元素的顺序就正好相反了,然后弹出栈2顶部的元素,就完成了一个先进先出的过程。 维护两个栈 stack1 和 stack2,其中 st
阅读全文
摘要:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 思路:第一个遍历的节点,最后输出,最后一个遍历的先输出,可以利用数组,每次遍历将值存入一个数组,然后反转数组,或者是用栈存入然后再输出,后进先出。 数组实现: var reversePrint = function(head) { va
阅读全文
摘要:矩阵是有序的,从左下角来看,向上数字递减,向右数字递增,因此从左下角开始查找,当要查找数字比左下角数字大时,右移,要查找数字比左下角数字小时,上移 function Find (array, target) { let row = array.lenghth //行 let col = array[
阅读全文
摘要:归并排序采用的是分治的思想,首先是“分”,将一个数组反复二分为两个小数组,直到每个数组只有一个元素;其次是“治”,从最小数组开始,两两按大小顺序合并,直到并为原始数组大小,下面是图解: 分”就是将原始数组逐次二分,直到每个数组只剩一个元素,一个元素的数组自然是有序的,所以就可以开始“治”的过程了。
阅读全文
摘要:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1: 输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买
阅读全文
摘要:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 暴力解法: 遍历,遇到负和抛弃之前的结果,重新积累,期间保留
阅读全文
摘要:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6], 5输出: 2 解法一:for循环 var searchInsert = function(nums, ta
阅读全文
摘要:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [
阅读全文
摘要:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例: 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合
阅读全文
摘要:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 num
阅读全文
摘要:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba"输出: True示例 2: 输入: "abca"输出: True解释: 你可以删除c字符。 左右如果相等那就继续比较,当左右不相等的时候,要么删除左边的一个再进行比较,要么删除右边的一个接着进行比较,
阅读全文
摘要:题目描述: 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama"输出: true示例 2: 输入: "race a car"输出: fa
阅读全文
摘要:如果一个矩阵的每一方向由左上到右下的对角线上具有相同元素,那么这个矩阵是托普利茨矩阵。 给定一个 M x N 的矩阵,当且仅当它是托普利茨矩阵时返回 True。 示例 1: 输入: matrix = [ [1,2,3,4], [5,1,2,3], [9,5,1,2]]输出: True解释:在上述矩阵
阅读全文
摘要:请判断一个链表是否为回文链表。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true解题思路:根据给出的示例找规律,可以看出回文链表就是,一个链表的前半部分和后半部分相等,而且长度不能是1,3,5...这种奇数,这样我们就可以将一个链表遍历,然
阅读全文
摘要:反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 这道题要求我们将一个链表反转,刚一看这道题目反转好像很难,但仔细分析后发现这道题的关键就是next指向问题。 平时我们做的链表题目都是让它的当前节点指向它的后一个节点,这样一步一
阅读全文