摘要:
题意: 将链表的后面k个剪出来,拼接到前面,比如 1->2->null 变成2->1->null。数字代表一段的意思。思路: k有3种可能,k>n,kn时,k%=n即可,而当k=n时,无需操作。链表可能为空! 1 /** 2 * Definition for singly-linked l... 阅读全文
摘要:
题意: 在集合candidates中选出任意多个元素,使得他们的和为target,返回所有的组合,以升序排列。思路: 难点在于如何去重,比如集合{1,1,2},target=3,那么只有一个组合就是1+2=3,而不是两个。 DFS解决,每次考虑candidates[i]取还是不取,但是这样子还... 阅读全文
摘要:
题意: 给一个数组,求严格递增的最长递增子序列的长度。思路: 开销是一个额外的O(n)的数组。lower_bound(begin,end,val)的功能是:返回第一个大于等于val的地址。 1 class Solution { 2 public: 3 int lengthOfLIS(ve... 阅读全文
摘要:
题意: 给一棵二叉树,每个节点上有一个数字,范围是0~9,将从根到叶子的所有数字作为一个串,求所有串的和。思路: 普通常规的DFS。 1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int... 阅读全文
摘要:
题意: 在1~9这9个数字中选择k个出来,若他们的和为n,则加入答案序列,注意升序。思路: 用DFS的方式,每次决定一个数字,共决策k次。假设上个决策是第i位为5,那么i+1位的范围就是6~9。 1 class Solution { 2 public: 3 vector> combina... 阅读全文
摘要:
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的。现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有... 阅读全文
摘要:
题意: 给两个有序(升or降)的数组,求两个数组合并之后的中位数。思路: 按照找第k大的思想,很巧妙。将问题的规模降低,对于每个子问题,k的规模至少减半。考虑其中一个子问题,在两个有序数组中找第k大,我们的目的只是将k的规模减半而已,所以可以对比nums1[k/2]和nums2[k/2]的大小,... 阅读全文