
剑指offer
工科扫地僧
这个作者很懒,什么都没留下…
展开
-
剑指 Offer 53 - II. 0~n-1中缺失的数字
class Solution {public: int missingNumber(vector<int>& nums) { for(int i=0;i<nums.size();i++) { if(nums[i]!=i) return i; } //有可能缺失的那个是最后一个,因为没有数组中无法判断 return...原创 2020-09-02 12:06:57 · 158 阅读 · 0 评论 -
礼物的最大价值
class Solution {public: int maxValue(vector<vector<int>>& grid) { if(grid.size()==0)return 0; int m=grid.size(); int n=grid[0].size(); vector<vector<int>>record(m,vector<int>(n,0)...原创 2020-08-30 23:57:41 · 157 阅读 · 0 评论 -
二叉搜索树与双向循环链表
类似题:二叉搜索树与双向链表/*// 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* _le..原创 2020-07-29 21:52:06 · 211 阅读 · 0 评论 -
136. 只出现一次的数字
class Solution {public: int singleNumber(vector<int>& nums) { int res=0; /* for(auto num:nums) res^=num; */ for(int i=0;i<nums.size();i++) res^=nums[i]; return ...原创 2020-06-29 16:31:54 · 277 阅读 · 0 评论 -
179. 最大数(类似剑指offer,最小数)
剑指offer 类似题https://blog.youkuaiyun.com/SHAOYEZUIZUISHAUI/article/details/106007891class Solution { static bool compare(int &a,int &b) { string str_a=to_string(a)+to_string(b); string str_b=to_string(b)+to_string(a); ...原创 2020-06-07 22:54:31 · 254 阅读 · 0 评论 -
295. 数据流的中位数
数据量很大时,会超时,超时,完成case为0%, O(nl ogn)class MedianFinder { vector<int>record; public: /** initialize your data structure here. */ MedianFinder() { } void addNum(int num) { record.push_back(num); ...原创 2020-06-07 22:09:53 · 197 阅读 · 0 评论 -
121. 买卖股票的最佳时机
基础思路:class Solution {public: int maxProfit(vector<int>& prices) { if(prices.size()==0)return 0; int min_price=INT_MAX; int max_profit=0; for(int i=0;i<prices.size();i++) { ...原创 2020-05-09 10:55:37 · 159 阅读 · 0 评论 -
160. 相交链表(同剑指offer,两个链表的公共节点)
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *getIntersectionNode(ListNode *headA, ListNode *hea...原创 2020-06-07 19:27:15 · 243 阅读 · 0 评论 -
数值的整数次方
class Solution {public: double myPow(double x, int n) { if(n==0)return 1; if(x==1)return 1; double res=1; long i=n; //if(n<0)i=-n; while(i) { if(i&1) res*=x;//当最低位二进制位为1时...原创 2020-06-05 23:46:19 · 246 阅读 · 0 评论 -
数组中的逆序对
class Solution { int count; //—————————————————————归并排序————————————————————///将arr[l...mid]和arr[mid + 1...r]两部分进行归并void __merge(vector<int>& nums, int L, int mid, int R){ //开辟零时空间 int *aux=new int [1+R-L] ; //给开辟的空间赋值 for (in...原创 2020-06-05 17:19:16 · 162 阅读 · 0 评论 -
343. 整数拆分(同剑指offer剪绳子)
给定一个正整数n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 ×3 ×4 = 36。class Solution {public: ...原创 2020-03-22 14:15:22 · 330 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。class Solution {public: void reOrderArray(vector<int> &array) { if(array.size()==0)return ; int L=-1;//当前基数的最大索引 vector&l原创 2020-05-29 16:16:27 · 183 阅读 · 0 评论 -
面试题61. 扑克牌中的顺子
class Solution {public: bool isStraight(vector<int>& nums) { if(nums.size()==0)return false; //先排序、因为初始的数据可能不是连续的 sort(nums.begin(),nums.end()); // int count=0; int count_0=0; int...原创 2020-05-29 15:20:13 · 201 阅读 · 0 评论 -
矩形覆盖
class Solution {public: //因为2*n是一个宽为2,长为n的矩阵, //假设先放置一个竖着的2*1的矩阵,则剩余的空间只能看f(n-1) //假设先放置一个横着的2*1的矩阵,则相当于放置了2*2的矩阵,则剩余的空间只能看f(n-2) //f(n)=f(n-1)+f(n-2) int rectCover(int number) { if(number<=0)return number; vector&l.原创 2020-05-28 19:57:39 · 155 阅读 · 0 评论 -
和为s的连续正数序列
参考链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/solution/shi-yao-shi-hua-dong-chuang-kou-yi-ji-ru-he-yong-h/滑动窗口class Solution {public:vector<vector<int>> findContinuousSequence(int target) { //滑动窗口..原创 2020-05-22 20:38:30 · 226 阅读 · 0 评论 -
最大子序和
class Solution {public: int maxSubArray(vector<int>& nums) { if(nums.size()==0)return 0; //建立一个数组存储连续子数组的和值 //当该数组的前一个元素值,大于等于0,将该值与nums[i]相加,存入该数组中,否则将nums[i]赋值到该数组中 //并在过程中寻找最大值 vector<...原创 2020-05-22 17:34:59 · 167 阅读 · 0 评论 -
138 复制带随机指针的链表
/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node(int _val) { val = _val; next = NULL; random = NULL; }};*/class Solution {public: Node* copyRandomLis...原创 2020-05-22 16:13:29 · 260 阅读 · 0 评论 -
二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {public: //pre必须是一个引用,随着全局改变,而改变原创 2020-05-21 17:06:10 · 199 阅读 · 0 评论 -
变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。class Solution {public: int jumpFloorII(int number) { if(number==0)return 0; //record[i]需要第i级台阶有多少种跳法 vector<int>record(number+1,0); //record_1[i-1]需要第i级台阶原创 2020-05-21 15:33:44 · 160 阅读 · 0 评论 -
70. 爬楼梯
假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2...原创 2020-03-21 15:46:19 · 306 阅读 · 0 评论 -
树的子结构
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: //判断当前节点A,能够作为B的根节点 b...原创 2020-05-20 20:41:34 · 211 阅读 · 0 评论 -
297. 二叉树的序列化与反序列化
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Codec {public: // Encodes a tree to a s...原创 2020-05-20 17:14:41 · 272 阅读 · 0 评论 -
不用加减乘除做加法
class Solution {public: int add(int a, int b) { int sum,carry; while(b!=0) { //异或得到无进位和 sum=a^b; //与后左移得到进位值 carry=(unsigned int)(a&b)<<1; ...原创 2020-05-18 17:39:33 · 168 阅读 · 0 评论 -
239、滑动窗口最大值
class Solution {public: vector<int> maxSlidingWindow(vector<int>& nums, int k) { vector<int>res; //各种情况都得讨论,不然下方有用下标,会导致段错误 if(nums.size()==0||k==0||k>nums.size())return res; //用双端队列来存向量中...原创 2020-05-18 11:01:50 · 233 阅读 · 0 评论 -
155、最小栈
class Solution {public: /** initialize your data structure here. */ stack<int>s1; //存放当前的最小值,与最小值相等也放进去 stack<int>s2; void push(int x) { s1.push(x); if(s2.size()==0||x<=s2.top()) ...原创 2020-05-14 23:22:16 · 168 阅读 · 0 评论 -
二进制的1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。正数负数输入都可以:class Solution {public: //在计算机的世界里,正负数是用补码形式存在的,正数的补码是原码,负数的补码是对应正数的反码加+1; int NumberOf1(int n) { if(n==0)return 0; unsigned int flag=1; int count=0; while(flag) .原创 2020-05-14 21:01:05 · 152 阅读 · 0 评论 -
264. 丑数 II
class Solution { //set是有序的,且唯一,先计算出2*k,3*k,5*k,存入set中,再循环,满足n个丑数为止 int dp(vector<int>&res,int n) { //set中存放的都是丑数,最后的数可能很大,超过int ,导致迭代器用不了 set<long long>record; //1是丑数,先插进去 record.insert(1);...原创 2020-05-14 16:25:05 · 203 阅读 · 0 评论 -
21. 合并两个有序链表
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* l1, ListNode* l2) { ListNode*Node =new ListNode(0); Node->next=l1; ...原创 2020-05-14 14:34:58 · 178 阅读 · 0 评论 -
二叉树中和为某一值的路径
参考链接:https://blog.youkuaiyun.com/SHAOYEZUIZUISHAUI/article/details/104528215输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x原创 2020-05-09 19:25:22 · 196 阅读 · 0 评论 -
把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323class Solution { static bool compare(int a,int b) { //按照两数转成字符串相拼接的大小进行排序 string str_1=to_string(a)+to_string(b); string str_原创 2020-05-08 22:25:33 · 158 阅读 · 0 评论 -
字符串的排列
class Solution { vector<string>res; vector<bool>used; void generate_Permutation(string &str,string &p) { if(p.size()==str.size()) { ...原创 2020-05-08 15:45:26 · 243 阅读 · 0 评论 -
剑指offer----二叉树的镜像
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution { public: void Mirror(...原创 2020-05-05 22:32:23 · 183 阅读 · 0 评论 -
剑指offer----按之字形顺序打印二叉树
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val...原创 2020-05-03 14:35:36 · 221 阅读 · 0 评论 -
剑指offer------把二叉树打印成多行
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};...原创 2020-05-03 13:48:44 · 173 阅读 · 0 评论 -
剑指offer----平衡二叉树
输入一棵二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树class Solution { //返回以root为根的树的最长深度 int lenth_tree(TreeNode* pRoot) { if(pRoot==NULL)return 0; return max(lenth_tr...原创 2020-05-03 13:11:48 · 155 阅读 · 0 评论 -
剑指offer------从上往下打印二叉树
从上往下打印出二叉树的每个节点,同层节点从左至右打印。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution { pub...原创 2020-05-03 09:49:36 · 181 阅读 · 0 评论 -
剑指offer---数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0class Solution {public: //注意exponent有负数的情况 double Power(double base, int exponent) { if(exponent==...原创 2020-04-25 23:30:13 · 150 阅读 · 0 评论 -
剑指offer--两个链表的第一个公共结点
输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ...原创 2020-04-25 23:18:20 · 212 阅读 · 0 评论 -
剑指offer---二叉树的深度
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { ...原创 2020-04-25 21:18:09 · 132 阅读 · 0 评论 -
剑指offer--整数中1出现的次数(从1到n整数中1出现的次数)
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。class Solution {public: int NumberO...原创 2020-04-24 18:20:35 · 150 阅读 · 0 评论