算法刷题
兰因絮果.
持之以恒
展开
-
【LeetCode】将数组分成和相等的三个部分
问题 给你一个整数数组 A,只有可以将其划分为三个和相等的非空部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i+1 < j 且满足 (A[0] + A[1] + … + A[i] == A[i+1] + A[i+2] + … + A[j-1] == A[j] + A[j-1] + … + A[A.length - 1]) 就可以将数组三等分。 思想 如果数组的和...原创 2020-03-11 15:30:50 · 140 阅读 · 0 评论 -
【LeetCode】332.零钱兑换
问题 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 思想 动态规划思想 设F(n)为总额为n时凑成的最少的硬币数,F(0)=0 推算公式为:F(0)=0,F(n)=min(F(n-coins[i]))+1 代码 class Solution { public int ...原创 2020-03-08 22:36:42 · 82 阅读 · 0 评论 -
【LeetCode】59.队列的最大值
问题 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 思想 用LinkedList结构模拟队列,remove(0)表示出队,add()表示入队 每一次push和pop对队列的最大值都会产生影响。 1)p...原创 2020-03-07 13:42:04 · 143 阅读 · 0 评论 -
【LeetCode】45.和为s的连续正整数
问题 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 思想 采用双指针。 由于一开始并不知道数组的大小,所以先不初始化,利用LinkedList记录所有可能的情况,以start,end,start,end…的形式存储。数组的长度即为lis.size()/2。 用sum记录当前start...原创 2020-03-06 19:15:23 · 148 阅读 · 0 评论 -
【LeetCode】1103分糖果Ⅱ
问题 排排坐,分糖果。 我们买了一些糖果 candies,打算把它们分给排好队的 n = num_people 个小朋友。 给第一个小朋友 1 颗糖果,第二个小朋友 2 颗,依此类推,直到给最后一个小朋友 n 颗糖果。 然后,我们再回到队伍的起点,给第一个小朋友 n + 1 颗糖果,第二个小朋友 n + 2 颗,依此类推,直到给最后一个小朋友 2 * n 颗糖果。 重复上述过程(每次都比上一次多给...原创 2020-03-05 18:29:56 · 141 阅读 · 0 评论 -
【LeetCode】最长回文子串
问题 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。 扩展中心法 1、最长子串的长度可能是奇数,也可能是偶数个。所以我们需要选取一个字符或两个字符作为中心进行扩散 2、找到关于中心对称的最长子字符串即为所求 马拉车算法 该算法改进了扩展中心算法(以下内容可能与原始算法有出入)。 1、为了避免处理奇数长度和偶数长度,先对原字符串进行处理。在原字符串的基础上间...原创 2019-10-24 22:01:50 · 133 阅读 · 0 评论 -
【LeetCode】两数相加
题目 给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 代码 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { in...原创 2019-10-20 21:34:17 · 75 阅读 · 0 评论 -
【剑指offer】面试题11:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 思路:暴力解法就是遍历了,但是这样没有用到它是旋转数组这个特性。 旋转数组应该是以最小元素为分界线,左边是一个非递减数组,右边也是一个非递减数组。 若array[0]<array[array.length-1]的,则这个数组是一个没有经过旋转的非递减数组,...原创 2019-08-27 19:51:16 · 101 阅读 · 0 评论 -
【剑指offer】面试题8:二叉树的下一个节点
题干:给定一颗二叉树和其中一个节点,找出中序遍历的下一个节点。 思路:根据中序遍历去查找,设置一个flag去标记已经遍历的结点是否是给定的结点。我在这里借用了自己之前写的类(参见添加链接描述),所以没有指向父结点的指针。代码如下: public BinaryTreeNode findNext(BinaryTree bTree , BinaryTreeNode target) { ...原创 2019-08-25 21:01:23 · 102 阅读 · 0 评论 -
【剑指offer】面试题7:重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 public TreeNode reConstructBinaryTree(int [] pre,int [] in) { //采用递归的思想 if(pre.length<=0||pre.length!=in.length) { ...原创 2019-08-23 20:05:12 · 164 阅读 · 0 评论