随笔分类 - 迭代法
摘要:首先复习下二叉搜索树BST的概念,总结一下就是 1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。3.任意结点的左、右子树也分别为二叉搜索树 参考了下大佬的解答, 如果两个节点值都小于根节点,说明他们
阅读全文
摘要:这题可以利用双指针倒排得办法。 我们创建3个指针,分别指向p1,p2分别指向数组1,2得末尾,p3指向数组1得末尾。 从后向前数组遍历nums1,从尾部值开始比较遍历,迭代比较值大小之后,使用较大得元素对nums1[p3]进行填充,当 p1<0 时遍历结束,此时 nums2 中可能存在数据未拷贝完全
阅读全文
摘要:根据题目的意思,我们可以多次买卖,也就是说我们可以叠加 多次股价上升,遇到当前元素比前一元素大则计算出这次叠加的效果。 时间O(n),空间O(1) public int maxProfit(int[] prices) { if (prices==null || prices.length==0) r
阅读全文
摘要:假设首元素即为结果,那么其必然再后续所有字符串中完整出现。 进行迭代,两两比较,遇到不同元素则表示截至当前元素得最长公共前缀已得出 时间O(m*n)(m为每个元素平均长度,n为元素个数),空间O(1) public String longestCommonPrefix(String[] strs)
阅读全文
摘要:傻傻的想了半天,看了题解才想起来高斯求和,真的巧妙。 高斯求和,高中数列得知识,等差数列之和=(首项+尾项)*项数/2 根据题意可得只少一个元素,那么先算出和然后再迭代一次减去所有元素即可 时间O(n),空间O(1) public int missingNumber(int[] nums) { in
阅读全文
摘要:投票法可解,思路如下: 假设第一个元素为多数,那么每次遇到相同元素+1,不同元素-1,迭代一遍之后必然有count>0(题目中多数得定义为出现次数大于1/2) 但是这个时候有一个问题,就是假设第一个元素不是多数,或者虽然是多数,但是在左侧某一段内非多数比如[2,1,1,2,2]在前三个 元素时2就是
阅读全文
摘要:题目要求在原数组上进行操作,于是又想到了双指针迭代的办法,维护一个快指针一个慢指针(参考283. 移动零), 每次快指针遇到与慢指针不同的元素则进行覆盖慢指针指向的下一元素(这里跟移动零有一点区别,因为这里是找 不通的元素,当前元素是不覆盖的)。时间O(n),空间O(1) public int re
阅读全文
摘要:双指针,类似弗洛伊德算法的办法,依次向后递推,每次快指针遇到不为0的 数就覆盖慢指针指向的下标,当快指针指向末尾,非0数就没有了,这个时候再 将慢指针截至末尾的数全部用0覆盖即可。这里在做了一点优化,利用for循环自身 的属性替代了快指针,我们只用维护一个慢指针就行了。 时间O(n),空间O(1)
阅读全文
摘要:很简单的迭代,时间O(n),空间O(1) public int maxProfit(int[] prices) { // 记录一个最小值,每次遇到更小的值就迭代掉, // 同时每次循环都判断一下是否可以获得最大收益 int minPrice=Integer.MAX_VALUE,res=0; for(
阅读全文

浙公网安备 33010602011771号