剑指offer
爱生活,爱代码
天行健,君子以自强不息
展开
-
剑指offer每日一题【序列化二叉树、字符串的排列】
序列化二叉树./* 解题思路:可以通过root走前序遍历,创建一个序列化字符串,再将这个序列 化字符串构造出一颗树*/class Codec {public: //通过前序遍历序列化字符串 void dfs_s(TreeNode* root, string &s) { if(!root) { s += "null "; return ; } .原创 2022-01-11 16:16:50 · 340 阅读 · 0 评论 -
剑指offer每日一题【滑动窗口的最大值、队列的最大值】
滑动窗口的最大值./* 解题思路:使用一个双端开口的队列,既可以队头出,也可以队尾出数据, 维护这个队列的时后保证队列是单调递减的(队首元素最大,那么就可以获取最 大值就是队首元素值了,时间复杂度就是o(1)),如果后面进来的值比队尾元素 大那么就将队尾元素pop掉,最后将最大值(队首元素)记录就行*/class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int.原创 2022-01-10 12:04:51 · 188 阅读 · 0 评论 -
剑指offer每日一题【顺时针打印矩阵、螺旋矩阵、栈的压入,弹出序列、验证栈序列 、把字符串转换成整数】
目录顺时针打印矩阵.螺旋矩阵栈的压入、弹出序列.验证栈序列.把字符串转换成整数.顺时针打印矩阵.class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { vector<int> res; //记录遍历 if(matrix.empty()) return res; int n = matr原创 2022-01-08 21:20:40 · 641 阅读 · 1 评论 -
剑指offer每日一题【构建乘积数组、和为s的连续正数序列、数组中出现次数超过一半的数字、圆圈中最后剩下的数字】
目录数组中出现次数超过一半的数字.构建乘积数组.和为s的连续正数序列.[ 圆圈中最后剩下的数字](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/).数组中出现次数超过一半的数字.方法一:摩尔投票法/* 解题思路: 摩尔投票法的解题思路比较简单,假设如果当前没有候选人(cnt = 0,val = 0),那么第一个出现的数字就投 票给他,遍历的过程只要值与va原创 2022-01-07 23:36:56 · 614 阅读 · 0 评论 -
剑指offer每日一题【扑克牌中的顺子、1 + 2 + .. N、数值的整数次方】
扑克牌中的顺子./* 解题思路: 如果nums中存在重复的值那么肯定不是顺子,可以利用set的性质不会包含重复的key值,insert接口函数插入 失败会返回pair对象,pair::second会被设置为false,利用这个特性筛选出来所有重复的序列把他pass掉 大小王是可以表示任意数字的所以遇到大小王就直接忽略跳过,在不断将值插入到set容器中选出最大值和最小 值,如果最大小减去最小值的结果小于5那么这个序列就是顺子*/class Solution .原创 2022-01-03 15:42:17 · 865 阅读 · 3 评论 -
每日一题【剑指 Offer 41. 数据流中的中位数】
数据流中的中位数.解题步骤:/* 解题思路: 得出一个数据流的中位数的问题我们可以之间建立两个堆,一个是大根堆,而另一个就是小根堆,通过建立两个 堆的关系从而来达到我们的目的(找出中位数)*/class MedianFinder {public: /** initialize your data structure here. */ MedianFinder() { /* 此处可以省略... */ } void ad..原创 2021-12-30 23:51:46 · 372 阅读 · 2 评论 -
剑指 Offer 36. 二叉搜索树习题
/*// Definition for a Node.class Node {public: int val; Node* left; Node* right; Node() {} Node(int _val) { val = _val; left = NULL; right = NULL; } Node(int _val, Node* _left, Node* _right) { .原创 2021-12-29 14:28:24 · 383 阅读 · 2 评论 -
剑指offer 搜索与回溯算法【矩阵中的路径、机器人的运动范围】
矩阵中的路径.代码:class Solution {public: /* 实现思路: 先暴力将每一个点作为起始位置,从起始位置开始搜索,将每一个点的四种走向全部分析完了, 如果该点合法那么就以这个点作为第二次的起点,重复以上过程,直到将整个字符串遍历完了就返回true, 如果中间出现当前字符与目标字符不相等的情况那么就不需要考虑了直接返回false。 这里主要注意的是题目的题意:如果一条路径经过了矩阵中的某一个.原创 2021-12-28 22:05:22 · 412 阅读 · 1 评论 -
力扣每日一题【剑指 Offer 03. 数组中重复的数字】
原题描述第一种能够想到的方法就是暴力求解了吧,只需要对原数组排序一次,通过比较前后两个值就能确定重复的数字class Solution {public: int findRepeatNumber(vector<int>& nums) { int size = nums.size(); sort(nums.begin(), nums.begin() + size); for(int i = 0; i < size; i+原创 2021-12-17 15:49:38 · 475 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数
链接: 剑指 Offer 56 - I. 数组中数字出现的次数.解题思路:实现思路:将ret异或完整个数组,得到那一个数字,在32个位为1的位置,假设不知道这个位置在哪,就可以用1 << i & ret 如果值为1表示找到了他是pos,再用这个pos位置的值去分组,将每一个数字pos位为0的异或在一组,将每一个数字pos位为1的异或在一起,分别用x和y(x和y的初始值都为0)对这两组数据异或,最终得到的那个结果就是只出现一次的两个数字int* singleNumbers(in.原创 2021-10-01 23:27:02 · 137 阅读 · 3 评论