剑指offer每日六题---------day five
剑指offer题25:复制一个随机链表
RondomListNode* RandomLinkCopy(RondomListNode *head)
{if (!head)return NULL;//头结点是空直接返回RondomListNode *cur = head, *next = head->next;//由①②③变成①①②②③③,但复制出来的结点的随机指针都指向空while (cur){RondomListNode *tmp = new RondomListNode(cur->val);cur->next = tmp; tmp->next = next;cur = next; if (next)next = next->next;}cur = head; next = cur->next;//将随机指针指向正确的位置while (cur){next->rand = cur->rand ? cur->rand->next : NULL;cur = next->next; if (cur)next = cur->next;}cur = head; next = cur->next;//将新旧链表分离开RondomListNode *tmp = next;while (cur){cur->next = next->next; cur = next->next;if (cur){ next->next = cur->next; next = cur->next; }else next->next = NULL;}return tmp;//返回复制出来的新链表的头结点
}
剑指offer题26:输入一棵二叉搜索树,将该二叉树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点的指针
TreeNode *_TreeToLink(TreeNode *root)
{if (!root)return NULL;//递归返回条件TreeNode *left = _TreeToLink(root->left);//left是左边单链表的最左结点TreeNode *right = _TreeToLink(root->right);//right是右边单链表的最左结点TreeNode *left_to_right;//左边单链表的最右结点left_to_right = left ? left->left : NULL;TreeNode *right_to_right;//右边单链表的最右结点right_to_right = right ? right->left : NULL;root->left = left_to_right;//根的左孩子if (left_to_right)left_to_right->right = root;root->right = right;//根的右孩子if (right)right->left = root;if (!left)left = root;left->left = right ? right_to_right : root;return left;
}
TreeNode *TreeToLink(TreeNode *root)//递归思路
{if (!root)return NULL;TreeNode *head = _TreeToLink(root);head->left = NULL;return head;
}
剑指offer题28:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,ps:如果不存在返回0.
方法一:排序 方法二:map<K,V> 方法三:阵地攻守思想,先让第一个元素作为第一个士兵来守阵地,count=1;
遇到相同的元素++count,否则--count;当count=0时,又以新的i值作为守阵地的士兵,直到最后的士兵,那即是所求元素
方法四:用堆找出一般元素,返回堆顶
int MoreThanHalfNum(vector<int> arr)//方法三
{if (arr.empty())return 0;int count = 1, soldier = arr[0];for (int i = 1; i < arr.size(); ++i){arr[i] == soldier ? ++count : --count;if (count == 0){soldier = arr[i];count = 1;}}count = 0;for (int i = 0; i < arr.size(); ++i){if (arr[i] == soldier)++count;}return count > arr.size() / 2 ? soldier : 0;
}
剑指offer题29:输入n个整数,找出其中最小的k个数
#include<queue>
vector<int> GetLeastNumbers(vector<int> input, int k)
{if (input.size() < k || k <= 0)return vector<int>();//特别注意k的取值priority_queue<int> pq;//找最小的前k个数,建大根堆 (孩子 less 双亲)for (int i = 0; i < input.size(); ++i){if (i < k)pq.push(input[i]);else if (pq.top() > input[i]){pq.pop();pq.push(input[i]);}}vector<int> arr(k); int index = k - 1;while (!pq.empty()){arr[index--] = pq.top();pq.pop();}return arr;
}
剑指offer题30:输入一个数组,求该数组的最大子数组和是多少。ps,该数组长度最少为1.
int FindGreatestSumOfSubArray(vector<int> arr)
{int max = arr[0], val = arr[0];for (size_t i = 1; i < arr.size(); ++i){val = val < 0 ? 0 : val;//确定val是保留原值还是置零val += arr[i];if (val > max)max = val;//max代表原数组[0,i]范围内的最大子数组加和}return max;
}
剑指offer每日六题---------day five相关推荐
- 剑指offer第41题 和为s的两个数
剑指offer第41题 和为s的两个数 #include<iostream> using namespace std;bool sumk(int*list,int length,int*n ...
- 《剑指offer》刷题笔记(发散思维能力):求1+2+3+...+n
<剑指offer>刷题笔记(发散思维能力):求1+2+3+-+n 转载请注明作者和出处:http://blog.csdn.net/u011475210 代码地址:https://githu ...
- 《剑指offer》刷题——【链表】从尾到头打印链表
<剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...
- 《剑指Offer》刷题之最小的K个数
<剑指Offer>刷题之最小的K个数 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 给定一个数组,找出其中最小的K个数. ...
- 挑战一天(12h)刷完《剑指offer》67题
提前说明,挑战的人不是我. 大家周末好,我是爱上 B 站的小吴,最近一段时间我在网站 AlgoMooc 录制剑指 Offer 的视频,同时上传了一部分到 B 站,基于推荐算法,B 站疯狂的给我推送如何 ...
- 《剑指offer》刷题总结
从三月初开始刷剑指offer上面的题,到现在花了近二十天的时间终于刷完了.应该说,掌握上面的技巧应付一些公司面试题和小公司的笔试题是完全没有问题的.之前参加一个公司笔试,算法题就有一题是剑指offer ...
- 剑指offer 面试32题
面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...
- 《剑指offer》75题 C++详细题解
目录 简单: 剑指 Offer 03. 数组中重复的数字 map: unordered_map: 原地交换 剑指 Offer 05. 替换空格 剑指 Offer 06. 从尾到头打印链表 出栈入栈 双 ...
- 《牛客网 剑指Offer前20题》
<剑指Offer> 牛客网 前20道题 前言知识 面试题1:二维数组中的查找 面试题2:二维数组中的查找 面试题3:从头到尾打印链表 面试题4:重建二叉树 ***** 面试题5:两个栈实现 ...
最新文章
- pandas为所有的列名添加后缀(add_suffix)
- 查看chrome驱动以及下载对应谷歌浏览器版本
- checkbox选中和不选中 jqu_jquery checkbox 选中不选中
- ajax提示弹出dev,windows git pull或者push代码时弹出安全框解决办法
- java Int数据工具类
- CentOS6.5下安装mfs分布式存储(转)
- 主流区块链底链技术横评 hyperledger fabric、fisco bcos、chainmaker
- nginx(三)初步搭建nginx虚拟主机
- 遗传算法图解_遗传算法图解指南
- 个人设计web前端大作业 基于html5制作美食菜谱网页设计作业代码
- 【STC单片机】通过ADC外部输入调节PWM占空比输出并串口打印当前脉冲值
- 职场必杀技之职场英语
- 搜狗推送代码之搜狗百万蜘蛛实现
- 中公教育12月04日内外盘分析
- 【修理】电脑维修 显卡错误(错误代码:43)
- Ubuntu 远程控制(使用自带远程工具)
- 人间不正经生活语录(一)
- dede - 栏目中判断
- objc.io 3.1 图像是怎样绘制到屏幕的 (转)
- ITE-开发遇到问题(一)--不能在除了主线程以外的函数调用UI函数
热门文章
- P41蜗牛一期--单臂路由
- python中类的继承关系使用什么符号表示_智慧职教: Python中类的继承关系使用( )符号表示?...
- ADNI挑选有意义的数据进行下载 【2】
- 一天一条Linux指令-tailf
- 单元测试日期使用ibatis将数据库从oracle迁移到mysql的几个修改点
- vue2.0 axios 登录post请求自动读取Set-Cookie设置
- 微信小程序 - 实现导航栏和内容上下联动功能
- c语言多文件编译 实例霓虹灯,单片机51c语言编程20种不同霓虹灯亮法
- 前端开发中需要用到的变换矩阵(2D游戏适用)
- 大象装企营销:16个月,血亏300万,投资人撤资,公司倒闭