周周的C++之路
kaaokou
断剑重铸之日,王者归来之时
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LINTCODE——单调递增的数
class Solution: """ @param num: a non-negative integer N @return: the largest number that is less than or equal to N with monotone increasing digits. """ def monotoneDigits(self, num): ...原创 2018-02-14 13:21:20 · 1681 阅读 · 0 评论 -
LINTCODE——Add Operators
LINTCODE——Add Operators思路:用回溯法去试,注意两个特殊情况: 一、数字越界,如果大于INT_MAX则溢出,不过给的数据没有这个,我把越界的检查删除了也AC了; 二、数字的有效性,即0987不是有效数字,这种情况要排除,排除方法也很简单,例如已知字符串str =“0987”,把str转换成long long 或者long型得到curNum,再次把curNum,to_stri原创 2017-10-23 10:39:53 · 1549 阅读 · 0 评论 -
LINTCODE——删除二叉查找树的节点
LINTCODE——删除二叉查找树的节点思路: 一、删除的节点无左右节点,直接return NULL; 二、删除的节点只有一个左节点或者右节点,return delNode->left 或者return delNode->right; 三、删除的节点即有左节点也有右节点,则需要: 1、将delNode备份,temp = delNode; 2、delNode指向后继右节点的最原创 2017-10-13 11:26:29 · 1630 阅读 · 0 评论 -
LINTCODE——Convert BST to Greater Tree
LINTCODE——Convert BST to Greater Tree思路:考的就是另外一种遍历方式,记前序、中序、后序遍历分别为:MLR、LMR、LRM,那么题目就是要求你用RML这种遍历方式遍历更新就好了;class Solution {private: int s = 0;public: /* * @param root: the root of binary原创 2017-10-13 10:54:28 · 1071 阅读 · 0 评论 -
LINTCODE——Folding Array
LINTCODE——Folding Array给一个长度为 n 的数组 nums 和一个长度为 k 的数组 req, 你需要根据要求折叠数组,并输出折叠的结果 1.如果 req[i] = 0 意味着你应该从左到右折叠, 例如:1 2 3 4 5 6 7 8 ==> 4 3 2 1 5 6 7 8 2.如果 req[i] = 1 意味着你应该从原创 2017-10-20 17:19:47 · 2155 阅读 · 0 评论 -
LINTCODE——Sliding Window Unique Elements Sum
LINTCODE——Sliding Window Unique Elements Sum 问题:Given an array and a window size that is sliding along the array, find the sum of the count of unique elements in each window.思路:总体来说不算太难,用一个map进出一个记录一下差原创 2017-10-11 15:35:22 · 2086 阅读 · 0 评论 -
LINTCODE——最大子数组III
LINTCODE——最大子数组III思路:动态规划的方法,记mustTheLast[i][j]为在前i个数中分成j段,且第j段必须有第i个数的最大值,notTheLast[i][j]为前i个中分成j段,且第j段不一定含有第i个数的最大值;注意初始化的数据,不能全部初始化为0,不然在全部为负整数以及一些其他情况的数组会出错; 动态规划方程为: mustTheLast[i][j] = max(mu原创 2017-10-11 13:10:52 · 1673 阅读 · 0 评论 -
LINTCODE——书籍复印
LINTCODE——书籍复印思路:刚开始用回溯做的,结果果然超时了,然后想了好久,发现可以用二分法,把每个人所需复印的页数作为二分法的讨论点,然后如果当前页数(即mid)能够满足少于或等于k个人数来复印,则二分法的右值左移(即查找有没有更小的数能够满足),反之左值右移class Solution {private: int res = INT_MAX;public: /*原创 2017-10-19 18:16:52 · 1779 阅读 · 0 评论 -
LINTCODE——滑动窗口的中位数
LINTCODE——滑动窗口的中位数思路:跟数据流中位数的中位数一样(我之前发的数据流中位数不是用堆来实现的),建立两个堆,left存放数组的前半部分,right存放后半部分,则中位数就为left的最大值;class Solution {public: /* * @param nums: A list of integers * @param k: An integer原创 2017-10-10 20:33:36 · 1932 阅读 · 0 评论 -
LINTCODE——创建最大数
LINTCODE——创建最大数思路:把这个问题分成两个子问题: 首先,求在数组中nums取k个数所能组成的最大数; 然后,把两个数组,nums1,nums2合并所能组成的最大数; 前提都是数字相对位置不变; PS:C++若已知nums1,nums2,则两个数组的大小可以直接用”>”等运算符来判断,这个和字符串一样,要是不想写两个数组比较的代码,可以直接用运算符;class Solution原创 2017-10-19 16:47:47 · 1628 阅读 · 0 评论 -
LINTCODE——数据流中位数
LINTCODE——数据流中位数思路:每加入一个新的数,用二分法找到其在数组中的位置,方法O(1)的存储,O(nlogn)的时间class Solution {public: /* * @param nums: A list of integers * @return: the median of numbers */ vector<int> medi原创 2017-10-10 16:38:58 · 1536 阅读 · 0 评论 -
LINTCODE——重复字符串
LINTCODE——重复字符串思路:题目要就计算A的重复次数,则由A和B的长度不难得出重复次数cnt的最大值应该是等于(B.size()%A.size() <= 1 ? 1 :2) + B.size()/A.size(); 即,如果B的长度除以A的长度取整(记为x),此时如果恰好整除或者余1,则A所能匹配到的最长值所能重复的最大次数应该是x+1,若余数超过1,则为x+2,若是不理解,也可以自己画个原创 2017-10-20 13:36:41 · 1699 阅读 · 0 评论 -
LINTCODE——二叉树具有相同值的最长路径
LINTCODE——二叉树具有相同值的最长路径思路:这套题目做了挺久的,思路清楚了其实不难 首先,这道题目中的E数组(存储边数据的数组)我们需要处理一下,我用的方法是建立一个二维数组adj,adj[i]存储与i节点相连的节点编号; 其次:我们在进行深度优先搜索的时候,要用一个marked的容器,记录节点i是否被访问过,如果被访问过,直接跳过节点i,不然会进入死循环 最后:最长路径的数据处理和L原创 2017-10-26 11:28:33 · 2414 阅读 · 2 评论 -
LINTCODE——Compute 24 Game
LINTCODE——Compute 24 Game题目:给你一个由4个数字组成的数组,判断这4个数能否通过*, /, +, -, (, ) ,计算得到24;思路:刚开始我想错了,以为只能再4个数中间添加运算符,结果题目是可以调换数组顺序的,修改之后依次遍历数组的情况,用next_permutation函数遍历,出现一个能计算得24立马结束程序;class Solution {public:原创 2017-12-16 21:42:35 · 1734 阅读 · 0 评论 -
LINTCODE——阶乘除法的最后一位数
LINTCODE——阶乘除法的最后一位数题目:给出两个数 A 和 B, 其中 B >= A. 我们需要计算结果 F 的最后一位数是什么, 其中F = B! / A!(1 <= A, B <= 10^18, A 和 B 非常大)思路:每次取最后一位数相乘之后再取最后一位数迭代就好了class Solution {public: /* * @param : the given num原创 2017-12-16 11:25:16 · 1607 阅读 · 0 评论 -
LINTCODE—— Coin Change II
LINTCODE—— Coin Change II题目:给你一个amount,再给你一个硬币数组,coins,数组的值表示为硬币的价值,硬币可以无限使用,求从数组中选择一定的组合满足硬币总价值等于amount有多少种情况思路:动态规划,类似于无限背包问题,假定dp[j]为从数组coins中选取总价值为j的情况,则不难得出有:dp[j] = dp[j] +dp[j-coins[i]],coins[i]原创 2017-12-16 11:11:11 · 1649 阅读 · 0 评论 -
LINTCODE——Digit Divide Numbers
LINTCODE——Digit Divide Numbers题目:给定一个区间【lower, upper】,寻找区间内的数字能分别整除各个位数上的数字,满足条件的数:eg,128,128 % 1 == 0, 128 % 2 == 0, and 128 % 8 == 0,如果某位数为0,则相当于不满足;思路:还是比较简单的,提交的时候唯一要注意的就是INT_MAX = upper的情况,这个时候再循环原创 2017-12-15 16:45:20 · 1656 阅读 · 0 评论 -
LINTCODE—— 3个不同的因子
LINTCODE—— 3个不同的因子思路:加入n有三个不同的因子,那么只能是1,n,还有就是n的开方了,并且sqrt(n)为质数,然后就没有然后了。。。。class Solution {public: /* * @param : the given number * @return: return true if it has exactly three distin原创 2017-12-03 21:55:14 · 2004 阅读 · 0 评论 -
LINTCODE——判断k个素数之和
思路:要想通过的话,得用那个还没有被证明的哥德巴赫猜想,即任何一个大于2的偶数,都可以写成两个质数的和,那么我么可以知道,如果存在一个数n为偶数,并且有n>=2*k(k=1,2,3….),那么n必定可以表示成k个质数之和,解题思路就是把n和k划分(偶数,偶数),(偶数,奇数),(奇数,偶数),(奇数,奇数),然后往(偶数,偶数)的情况逼近就好了 PS:此外再判定一个较大的数num是否为质数的情况,原创 2017-11-22 09:25:25 · 1843 阅读 · 0 评论 -
LINTCODE——下一个稀疏数
LINTCODE——下一个稀疏数 思路:比特位我不太厉害,用的解法也不太理想,关键思路每次把x末尾i个数置0(二进制形式),再加上2的i次方就好了,判定是不是稀疏数,如果是就返回参数就OK了,其实可以优化到判断x的第i位非0才把i到0的之间的数置0…,不过有点懒,就不搞了,现在代码的最差时间是(O(32的平方));class Solution {public: /* * @par原创 2017-11-17 18:40:15 · 1803 阅读 · 0 评论 -
LINTCODE——计算最大值
LINTCODE——计算最大值给一个字符串类型的数字, 写一个方法去找到最大值, 你可以在任意两个数字间加 + 或 *您在真实的面试中是否遇到过这个题? Yes 样例 eg1:给出 str = 01231, 返回 10 ((((0 + 1) + 2) * 3) + 1) = 10 我们得到了最大值 10 eg2:给出 str = 891, 返回 73 因为 8 * 9 * 1 = 72 和 8原创 2017-11-17 13:05:02 · 1857 阅读 · 0 评论 -
LINTCODE————最小划分
LINTCODE————最小划分思路:利用背包问题的思路,对数组求和,计为sum,则我们只需要知道dp[sum/2]的分配是否存在就好可,如果不存在,那么我们取dp[sum/2-1]….一直到存在为止,dp[sum/2-i]存在的时候,也就是说明一边分配sum/2-i,一边 分配sum-sum/2+i为要求的最小分配,然后就差值就OK了class Solution {public: /*原创 2017-11-17 12:26:16 · 2591 阅读 · 0 评论 -
LINTCODE——Number of Subsequences of Form a^i b^j c^k
思路:这道题目还是很有意思的,统计情况,如果要遍历情况的话可以用回溯法,不过超时是必然的,我们可以用数学的思路来分析这个问题: 分析:abc必须按照顺序排列才能满足我们的情况,所以,我们从后往前考虑,不做任何的推理,光凭逻辑我们应该可以知道,当str[i] = ‘c’的时候,此时字符串的排列情况,应该与i之前的c出现的次数,以及b有关;同样的我们可以知道在i之前的j当str[j] = ‘b’的时候原创 2017-11-17 12:01:09 · 2392 阅读 · 1 评论 -
LINTCODE——房屋染色II
LINTCODE——房屋染色II思路:和房屋染色I一样,动态规划,不同的是,每一个房子的选择有K种,分析发现,令dp[i][j]表示为第i个房子染第j种颜色时的最小费用,则有等式dp[i][j] = costs[i-1][j]+min{dp[i-1][1toK且不等于j]}class Solution {public: /* * @param costs: n x k cost原创 2017-10-10 14:19:30 · 1726 阅读 · 0 评论 -
LINTCODE——吹气球
LINTCODE——吹气球思路:dp[start][end] 表示从start到end的最大分数。当mid气球吹爆的时候,left和right变成相邻的气球,此时如果将mid吹爆再切割,则不方便转移,那么就以mid为分割点,先吹爆两侧的气球。mid最后吹爆:mid = nums[start-1]*nums[i]*nums[end+1];参考class Solution {public: /转载 2017-10-10 10:49:24 · 1677 阅读 · 0 评论 -
LINTCODE——逆序对
LINTCODE——逆序对思路:本来直接统计的,结果TIMEOUT,后来改用归并排序统计,通过了,就一个注意的,数组num分成L,mid,R三段时,如果L<=i<=mid ,mid+1 <= j <=R,此刻如果num[j] < num[i] ,那么对于J来说就有mid+i-1个逆序对;class Solution {private : long long count = 0;原创 2017-09-19 16:25:28 · 1879 阅读 · 0 评论 -
LINTCODE——将数组重新排序以构造最小值
LINTCODE——将数组重新排序以构造最小值 说明:这个把数组的数转入到字符串数组,然后排序字符串数组,再把这些值放在一个字符串之下就好了(把所有为0的值过滤掉就OK了)bool compare(const string &a,const string &b){ string x = a+b; string y = b+a; return x < y;}class So原创 2017-09-19 14:09:16 · 1648 阅读 · 0 评论 -
LINTCODE——第k个排列
LINTCODE——第k个排列问题:给定 n 和 k,求123..n组成的排列中的第 k 个排列。思路:n个排列有n!种组合,根据k/(n-1)!来确定左边的数值,这说的说太抽象,举个例子吧;eg:n=5,k = 98,那么k/(n-1)!为num = 4,所以输出的string第一个就是num+1(不过当k%/(n-1)! == 0为特殊情况,额外处理一下就好了),还是看代码吧,跟着代码走一遍数值原创 2017-09-19 11:58:02 · 1722 阅读 · 0 评论 -
LINTCODE——数字组合,数字组合II
LINTCODE——数字组合,数字组合II说明:两题都是采用回溯法解决问题,只是回溯条件和最后数值处理方法略有不同;数字组合:由于每个数字都可以重复使用,所以把回溯情况分为两种:一是取当前值;二是把当前值去掉,取下一个值;class Solution {public: /* * @param candidates: A list of integers * @param原创 2017-09-19 10:45:43 · 1854 阅读 · 0 评论 -
LINT_CODE——恢复IP地址
LINT_CODE——恢复IP地址思路:偷懒的思路是,生成一个0到255的关键字容器,在回溯的时候检测是否合格,合格就继续深层回溯;class Solution {public: /* * @param s: the IP string * @return: All possible valid IP addresses */ vector<strin原创 2017-09-25 16:15:50 · 1597 阅读 · 0 评论 -
LINTCODE——前序遍历和中序遍历树构造二叉树
LINTCODE——前序遍历和中序遍历树构造二叉树思路: 第一步:根据前序遍历可以得到树的根节点(root); 第二步:在中序遍历中找到(root)的所在位置,将中序数组划分成左右两个数组,对应左子树(left_tree)和右子树(right_tree); 第三步:同样的划分前序数组; 最后:递归结果就好了。。。。class Solution { /** *@param p原创 2017-09-16 15:01:32 · 1537 阅读 · 0 评论 -
LINTCODE —— 二叉查找树中搜索区间
LINTCODE —— 二叉查找树中搜索区间 问题描述:给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。方法一:用的最简单的思路,把二叉树遍历出来,然后截取k1到k2之间的值就好了;class Solution {public原创 2017-09-16 11:21:38 · 1626 阅读 · 0 评论 -
LINTCODE —— 验证二叉查找树
LINTCODE —— 验证二叉查找树问题说明:给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。思路:注意严格二字的理解,这里是说对root的左子树中的所有数值不存在一个比root->val大的值,同理可以知道对root的右子树中原创 2017-09-16 10:48:29 · 1710 阅读 · 0 评论 -
LINTCODE——交换链表当中两个节点
LINTCODE——交换链表当中两个节点 说明:主要是考查操作链表,如果直接改变节点的权值就失去了做题的意义,代码首先查找节点所在的位置,然后交换节点,注意有一个为头节点的特殊情况;ListNode * swapNodes(ListNode * head, int v1, int v2) { // write your code here if(head == NUL原创 2017-09-15 20:33:04 · 1832 阅读 · 0 评论 -
LINTCODE---排序列表转换为二分查找树
LINTCODE—排序列表转换为二分查找树 思路:主要就是用快慢指针找出中间点,作为一个伪“顶点”,然后递归调用自身,返回左右节点;class Solution {public: /* * @param head: The first node of linked list. * @return: a tree node */ TreeNode * s原创 2017-09-15 19:31:05 · 1534 阅读 · 0 评论 -
LINTCODE——转换字符串到整数
LINTCODE——转换字符串到整数思路:并不是特别难,主要把情况考虑到就好了,如果开始计算数值,那么之后出现的所有非数值元素,直接输出结果,还有再每次得到res的值之后都进行一次检查,防止long long型溢出;class Solution {public: /* * @param str: A string * @return: An integer *原创 2017-09-27 17:11:32 · 1549 阅读 · 0 评论 -
LINTCODE——有效数字(待改进)
LINTCODE——有效数字思路:代码写的稀烂,暂时没想好更好的处理分类,虽然AC了,但是还是mark一下; 注意”+.1e4”为TRUE;class Solution {public: /* * @param s: the string that represents a number * @return: whether the string is a valid原创 2017-09-27 21:50:09 · 1575 阅读 · 0 评论 -
LINTCODE——解码方法
LINTCODE——解码方法思路:这题有点大意,刚开始漏了好多边界情况,如“1289012”、“123120024”等,我把这两个分别叫做0前数超范围,和双0情况;考虑到边界,然后用动态规划分析可知,在正常情况下,对于给定字符串S,n为S的长度,T(i)为字符串前i个字符的解码数,则不外乎三种情况,T(i)=T(i-1),T(i) = T(i-1)+T(i-2),T(i)=T(i-2),根据情况分类原创 2017-09-21 20:08:37 · 2865 阅读 · 0 评论 -
LINTCODE——K组翻转链表
LINTCODE——K组翻转链表思路:和翻转链表差不多,就是要注意每隔K个值打断、翻转、拼接就好了/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} *原创 2017-10-09 09:39:40 · 2239 阅读 · 0 评论 -
LINTCODE——区间求和II
LINTCODE——区间求和II思路:线段树的构造,线段树的查询,线段树的修改的结合版,三个程序拼接再一起就是这个题目的解法了,和统计前面比自己小的数的个数一样class Solution {class SegmentTreeNode{ public: int start, end; long long count; SegmentTreeNode *left原创 2017-10-17 17:09:28 · 1590 阅读 · 0 评论
分享