offer

剑指offer刷题记录

 ̄綄美尐妖づ 提交于 2020-04-02 14:00:33
记录了剑指offer的刷题过程,一共67道题,题目来源 牛客网-剑指offer 。 1.数组--二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 左上角为最小值,右下角为最大值,进行二维二分查找 # python class Solution: def Find(self, target, array): w = len(array) for i in range(w): if target in array[i]: return True /* * C++ * 参考 https://www.nowcoder.com/profile/9734827/codeBookDetail?submissionId=12713594 * 矩阵是有序的,从左下角来看,向上数字递减,向右数字递增, * 因此从左下角开始查找,当要查找数字比左下角数字大时。右移 * 要查找数字比左下角数字小时,上移 */ class Solution { public: bool Find(int target, vector<vector<int> > array) { int rowCount = array.size(); int

剑指offer---平衡二叉树

断了今生、忘了曾经 提交于 2020-03-06 05:13:20
题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 解题思路: 通过得出二叉树的高度,从而判断是否为平衡二叉树。 平衡二叉树: 是一棵二叉排序树,即二叉搜索树 每个结点的左右子树的高度相差不超过1。 平衡二叉树的介绍: 关于平衡二叉树 通过flag标志,在求二叉树的高度的时候,比较左右子树的高度相差值是否大于1。 剑指offer中题目: 关于求解树的高度: 剑指offer—二叉树的深度 //计算数的高度,并判断是否为平衡二叉树 int getDepth ( TreeNode * pRoot , bool & flag ) { if ( pRoot ) { int left_depth = getDepth ( pRoot - > left , flag ) ; int right_depth = getDepth ( pRoot - > right , flag ) ; if ( fabs ( left_depth - right_depth ) > 1 ) { flag = false ; } if ( left_depth < right_depth ) { return right_depth + 1 ; } else { return left_depth + 1 ; } } return 0 ; } //平衡二叉树 bool IsBalanced_Solution

Shopping Offers

左心房为你撑大大i 提交于 2020-03-06 01:37:15
1.解析 题目大意,给定每个商品的价值和优惠券(优惠券可以重复使用),求解所购买商品最少花多少钱。 2.分析 我最初看到这道题的时候,求最值,以为是DP,但在设计的过程中,发现有个问题,就是 所取到的值并不是局部的最优解 ,因为不单要考虑优惠券,而且还要考虑无法使用优惠券的那部分的钱,所以不是DP。参考 @Grandyang 博主的思路,发现其实采用深度优先检索是最简便的,利用一个临时变量表示是否当前的优惠券可用,若可用,则继续搜索,若不可用,恢复之前的状态,搜索下一个。蛮简单的,具体实现如下: class Solution { public: int shoppingOffers(vector<int>& price, vector<vector<int>>& special, vector<int>& needs){ int res = 0, n = price.size(); for (int i = 0; i < n; ++i) res += price[i] * needs[i]; for (auto offer : special){ //每次遍历所有的优惠券,因为优惠券的使用数量不限 bool isValid = true; for (int i = 0; i < needs.size(); ++i){ //假设当前的优惠券可用 if (needs[i] <

剑指 offer 反转链表

蹲街弑〆低调 提交于 2020-03-05 18:14:30
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* ReverseList(ListNode* pHead) { if (pHead ==NULL){ return NULL; } ListNode *pre = NULL; ListNode *cur = pHead; ListNode *temp = NULL; while (cur != NULL){ temp = cur->next;//在这里暂存一下下一个指针 cur->next = pre;//把当前的值指向前一个值 pre = cur;//前一个值向后走一步 cur = temp;// 把下一个值付给当前的值 } return pre; } }; 来源: CSDN 作者: ttomchy 链接: https://blog.csdn.net/ttomchy/article/details/104678146

剑指offer 66题 -- 输入一个链表,输出该链表中倒数第k个结点。

和自甴很熟 提交于 2020-03-03 17:18:38
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {   //变量定义区   ListNode* pNode = pListHead;   ListNode* pPrevious = pListHead;   //入参检查   if(pListHead == NULL || k ==0)     return NULL;   //先移动k个节点   for(unsigned int i=0; i < k-1; i++)   {     if(pNode->next == NULL )       return NULL;        pNode = pNode->next;   }   //前后节点整体移动   while(pNode->next != NULL)   {     pNode = pNode->next;     pPrevious = pPrevious->next;   }   return pPrevious; } };

剑指offer 面试题7.重建二叉树

懵懂的女人 提交于 2020-03-02 13:18:20
0 、题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果都不包含重复的数字。 1 、解法 1 )由前序遍历的第一个节点可以得到该树的根节点R。 2 )在中序遍历中找到该根节点R,R节点可将中序遍历的序列分成左子树和右子树。 3 )将左子树和右子树作为新的子树并重复 1 ) 来源: https://www.cnblogs.com/Justdocument/p/12394777.html

[Leetcode] DP-- 638. Shopping Offers

痞子三分冷 提交于 2020-02-27 13:55:28
In LeetCode Store, there are some kinds of items to sell. Each item has a price. However, there are some special offers, and a special offer consists of one or more different kinds of items with a sale price. You are given the each item's price, a set of special offers, and the number we need to buy for each item. The job is to output the lowest price you have to pay for exactly certain items as given, where you could make optimal use of the special offers. Each special offer is represented in the form of an array, the last number represents the price you need to pay for this special offer,

连载《一个程序猿的生命周期》- 39、年底,历时一个月找工作,无奈中前行

主宰稳场 提交于 2020-02-27 02:15:12
一个程序猿的生命周期 微信平台 口 号:职业交流,职业规划;面对现实,用心去交流、感悟。 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103 微 博: http://www.weibo.com/u/5723400254 二维码: 摘要:有时候很奇怪,太想得到的东西,反而得不到;不太再意的东西,却是无心插柳柳成荫。想要走的路有可能是迷途,无意走上路却是正确的。只要敢于向前走,冥冥之中好像都已经安排好了。 《 35、提出辞职,老板为何发怒? 》中描述了我与老板的最后一次交流,没有牵挂的裸辞了。当时是2014年11月多,可能有人会质疑我:(1)年底不好找工作!(2)年终奖不要了?年底招人的企业才需要货真价实的人,干嘛非得年初跳槽季去竞争,这叫非对称优势;连销售提供都没有的公司,还能指望发年终奖嘛,提前放两天年假就不错了。 在微信公众平台、QQ群里,和大家有交流,有网友认为有家、有孩子了,就不要随便跳槽了。我认同这个观点,我跳槽是有前提条件的:(1)能够保障现在的生活条件,这是最低要求。(2)能够有一定的时间照顾到家里,毕竟老婆一个人带孩子。这两点要求在我的可控范围内,至于跳槽,是有目标的:想有更全面的发展。40岁的时候要站在哪里?现在就要付出努力了。 任何基本的工作都可以胜任,干过生产、干过服务和维修、干过开发、干过项目(管理、技术和商务)、干过软硬件

跳槽天天有,offer哪家强?

拜拜、爱过 提交于 2020-02-17 19:13:10
跳槽天天有,offer哪家强? 小伙伴从去年开始,一直叨叨要跳槽,大大小小的公司面试了很多,但总没有拿到一个满意的offer,要么package太低,要么就是面试被虐。经过前几次的面试失利,终于明白了什么叫基础不牢,地动山摇。面试官随便针对一个知识点深入考察一下,就回答不出来,就这样,还怎么能通过面试? 不过,最近收到了小伙伴的捷报,已拿到阿里的offer,公司足够大,base还可以,虽然是个P6,但还是隐隐感觉到他很满意。 其实,我还是有点疑惑,他之前的基础很一般,咋就突然拿到了阿里的offer。后来没忍住,问他: “你最近都干啥了,阿里面试都问你什么了? ” 结果,这小伙最近半年居然一直在闭关修炼,把一些基础的源码慢慢都啃了一遍。 最基本的HashMap 和 ConcurrentHashMap 线程池的源码实现 阻塞队列BlockingQueue相关实现 ReentrantLock 实现,以及其内部同步器Sync的实现原理 Future的实现原理 AtomicXXX是如何运转的 ... 听他讲完,感觉把并发包中的相关实现都系统的整理了一遍。 除了JDK中的源码,还挑了一个自己比较感兴趣的中间件redis,深入的学习了下。 哎,就冲你这个态度,我也想给你offer。 不过,说到源码,有些同学似乎比较反感,总觉得会写代码就成,为什么一定要去了解源码是怎么实现? 看源码的几个好处:

【剑指offer】二叉树的镜像

我们两清 提交于 2020-02-15 16:02:26
题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 分析: dfs遍历交换其左右子树即可 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ class Solution { public: void dfs(TreeNode *root) { //交换左右子树 TreeNode *temp; temp=root->left; root->left=root->right; root->right=temp; //继续对其左右子树进行交换操作 if(root->left!=NULL) dfs(root->left); if(root->right!=NULL) dfs(root->right); return ; } void Mirror(TreeNode *root) { if(root!=NULL) dfs(root); } }; 来源: https://www.cnblogs.com