剑指offer
当如磐石
这个作者很懒,什么都没留下…
展开
-
米哈游笔试9-19
1.顺时针旋转打印字符('A’到’Z’循环打印)#include <iostream>#include <vector>using namespace std;//AC:顺时针旋转打印字符('A'到'Z'循环打印)int main(){ int M, N; cin >> M >> N; vector<vector<char>> vc(M, vector<char>(N, 0)); char cur = '原创 2020-09-19 22:01:29 · 688 阅读 · 0 评论 -
剑指offer54二叉搜索树的第K大节点
剑指offer54二叉搜索树的第K大节点class Solution {public: int count = 0; TreeNode* KthNode(TreeNode* pRoot, int k) { if(pRoot == nullptr || k == 0) return nullptr; TreeNode* node = KthNode(pRoot->left, k); if(node != nullptr) ret原创 2020-09-14 16:57:44 · 84 阅读 · 0 评论 -
剑指offer53数字在升学数组中出现的次数(二分法)
剑指offer53数字在升学数组中出现的次数class Solution {public: int GetNumberOfK(vector<int> data ,int k) { if(data.size() == 0) return 0; int left = getFirstk(data, 0, data.size() - 1, k); int right = getLastk(data, 0, data.size() - 1, k原创 2020-09-14 15:56:37 · 2071 阅读 · 0 评论 -
剑指offer51数字中的逆序对(归并排序)
剑指offer51数字中的逆序对class Solution {public: int InversePairs(vector<int> data) { int len = data.size(); if(len == 0) return 0; vector<int> tmp(len); int ret = 0; mergeSort(data, tmp, 0, len - 1, ret);原创 2020-09-14 14:21:43 · 65 阅读 · 0 评论 -
华为机试-购物单
华为机试-购物单#include<iostream>#include<vector>using namespace std;int max(int m, int n){ return m>n?m:n;}int dp[3200];int main(){ int N,n,v,p,q; cin >> N >> n; N = N/10; int *ZJ_Pri = new int[n+1](); in原创 2020-08-23 09:39:27 · 165 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串class Solution {public: //哈希表 + 双指针 int lengthOfLongestSubstring(string s) { unordered_map<int, int> dic; int res = 0; for(int i = 0, j = 0; j < s.length(); j++) { dic[s[j]]++原创 2020-08-15 15:48:23 · 68 阅读 · 0 评论 -
剑指offer49丑数
丑数class Solution {public: int GetUglyNumber_Solution(int index) { if(index <= 0) return 0; int p2 = 0, p3 = 0, p5 = 0; //初始化三个指向三个潜在成为最小丑数的位置 vector<int> res(index, 0); res[0] = 1; for(int i = 1; i原创 2020-08-15 11:11:46 · 77 阅读 · 0 评论 -
剑指 Offer 47. 礼物的最大价值
剑指 Offer 47. 礼物的最大价值/*class Solution {public: //超时:时间O(m * n)(m, n分别为矩阵的第一维和第二维的长度),空间O(1) int res = 0; int maxValue(vector<vector<int>>& grid) { int len1 = grid.size(); if(len1 == 0) return 0; int len2原创 2020-08-14 15:55:12 · 63 阅读 · 0 评论 -
剑指offer顺时针打印矩阵
剑指offer顺时针打印矩阵class Solution {public: vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> res; if(matrix.size() == 0 || matrix[0].size() == 0) return res; int top = 0; int bottom原创 2020-08-12 11:34:50 · 77 阅读 · 0 评论 -
剑指offer合并两个排序的链表(使用dummyHead)
合并两个排序的链表/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { if(!pHead1) return pHead2; if(!pHead2原创 2020-08-12 01:29:49 · 109 阅读 · 0 评论 -
剑指 Offer 19. 正则表达式匹配
剑指 Offer 19. 正则表达式匹配class Solution {public: bool isMatch(string s, string p) { if(p.empty()) { return s.empty(); } //检查第一个元素是否匹配 bool first_match = !s.empty() && (s[0] == p[0] || p[0] == '.');原创 2020-08-06 19:03:43 · 92 阅读 · 0 评论 -
剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数class Solution{public: vector<int> res; vector<int> printNumbers(int n) { if (n <= 0) return res; string number(n, '0'); for (int i = 0; i <= 9; i++) //从高位到低位进行全排列 { number[0] = i + '0';//首字符赋初值原创 2020-08-03 16:59:43 · 94 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方
剑指 Offer 16. 数值的整数次方/*class Solution {public: //超时 double myPow(double x, int n) { if(n == 0) return (double)1; int flag = n > 0 ? 1 : -1; unsigned int absN = n > 0 ? n : -n; double ans = helper(x, absN);原创 2020-08-03 15:31:28 · 71 阅读 · 0 评论 -
剑指 Offer 14- I. 剪绳子&&剑指 Offer 14- II. 剪绳子 II
剑指 Offer 14- I. 剪绳子class Solution {public: int cuttingRope(int n) { if(n == 2) return 1; if(n == 3) return 2; int ans = 0; int numOf3 = n / 3; int modulus = n % 3; if(modulus == 0) { ans = p原创 2020-08-02 20:33:16 · 62 阅读 · 0 评论 -
剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围class Solution { //BFSpublic: int count = 0; int movingCount(int m, int n, int k) { vector<vector<int>> flag(m, vector<int> (n, 0)); helper(m, n, k, 0, 0, flag); return count;原创 2020-07-31 20:40:48 · 62 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
剑指 Offer 12. 矩阵中的路径class Solution {public: unsigned int len1, len2; bool exist(vector<vector<char>>& board, string word) { len1 = board.size(); if(len1 == 0) return false; len2 = board[0].size(); if原创 2020-07-31 19:16:42 · 75 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 11. 旋转数组的最小数字class Solution {public: int minArray(vector<int>& numbers) { int len = numbers.size(); if(len == 0) return INT_MAX; int left = 0; int right = len - 1; while(left < right) {原创 2020-07-30 22:42:39 · 60 阅读 · 0 评论 -
剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题class Solution {public: //(a + b) % c = (a % c + b % c) % c; //时间O(n), 空间O(1) int numWays(int n) { if(n == 0) return 1; if(n <= 3) return n; int s1 = 1; int s2 = 2; int sum =原创 2020-07-29 23:57:07 · 75 阅读 · 0 评论 -
剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列class Solution {public: /* 求余运算规则: 设正整数 x,y,p,求余符号为 ⊙ ,则有 (x+y)⊙p=(x⊙p+y⊙p)⊙p。 根据以上规则,可推出 f(n)⊙p=[f(n−1)⊙p+f(n−2)⊙p]⊙p ,从而可以在循环过程中每次计算 sum=(a+b)⊙1000000007 此操作与最终返回前取余等价。 */ int fib(int n) { if(n <原创 2020-07-24 19:03:49 · 100 阅读 · 0 评论 -
LeetCode225. 用队列实现栈
225. 用队列实现栈class MyStack {public: /** Initialize your data structure here. */ MyStack() { } /** Push element x onto stack. */ void push(int x) { if(q1.empty() && q2.empty()) { q1.push(x); }原创 2020-07-23 23:05:58 · 220 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。class Solution{ /* 时间复杂度:对于插入和删除操作,时间复杂度均为 O(1)。插入不多说,对于删除操作, 虽然看起来是 O(n) 的时间复杂度,但是仔细考虑下每个元素只会「至多被插入和弹出 stack2 一次」, 因此均摊下来每个元素被删除的时间复杂度仍为 O(1)。 空间复杂度:O(n)。需要使用两原创 2020-07-23 22:23:45 · 58 阅读 · 0 评论 -
剑指offer8二叉树的下一个节点
二叉树的下一个节点题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。/*struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLinkNode *next; TreeLinkNode(int x) :val(x), left(NUL原创 2020-07-23 21:50:10 · 84 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字/*class Solution {public: //抵消法:时间O(N),空间O(1)(原来他的正式名字叫摩尔投票法) int majorityElement(vector<int>& nums) { int ans = nums[0]; int count = 1; for(int i = 1; i < nums.size(); i++) {原创 2020-07-18 00:02:12 · 66 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
剑指 Offer 28. 对称的二叉树/** * 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: bool isSymm原创 2020-07-16 00:14:58 · 64 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组
剑指 Offer 66. 构建乘积数组/*class Solution {public: //使用除法 //分三种情况:数组中没有0;只有一个0和有大于等于2个0 vector<int> constructArr(vector<int>& a) { int numOfZero = 0; int indexOfZero = INT_MAX; int multi = 1; for(int原创 2020-07-12 23:52:06 · 57 阅读 · 0 评论 -
剑指 Offer 53 - II. 0~n-1中缺失的数字
剑指 Offer 53 - II. 0~n-1中缺失的数字/*class Solution {public: //时间O(n),空间O(1) int missingNumber(vector<int>& nums) { int len = nums.size(); if(len == 0) return -1; int i = 0; for( ; i < len; i++) {原创 2020-07-08 00:39:18 · 154 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列class CQueue {public: //时间O(n), 空间O(n) CQueue() { } void appendTail(int value) { st1.push(value); } int deleteHead() { if(!st2.empty()) { int head = st2.top();原创 2020-06-30 07:56:28 · 164 阅读 · 0 评论 -
剑指 Offer 61. 扑克牌中的顺子
剑指 Offer 61. 扑克牌中的顺子/*class Solution {public: bool isStraight(vector<int>& nums) { if(nums.size() < 5) return false; sort(nums.begin(), nums.end()); int countOfZero = 0; int sum = 0; for(int i = 0;原创 2020-06-26 10:24:13 · 126 阅读 · 0 评论 -
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+nclass Solution {public: int sumNums(int n) { if(n == 1) return 1; return n + sumNums(n - 1); }};原创 2020-06-25 22:26:40 · 146 阅读 · 0 评论 -
剑指 Offer 63. 股票的最大利润
剑指 Offer 63. 股票的最大利润/*class Solution {public: int maxProfit(vector<int>& prices) { int len = prices.size(); if(len < 2) return 0; int ans = 0; int minPrices = prices[0]; for(int i = 1; i < len;原创 2020-06-25 22:22:57 · 76 阅读 · 0 评论 -
剑指 Offer 68 - II. 二叉树的最近公共祖先
剑指 Offer 68 - II. 二叉树的最近公共祖先/** * 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: Tr原创 2020-06-20 20:36:47 · 182 阅读 · 0 评论 -
剑指offer面试题46. 把数字翻译成字符串
面试题46. 把数字翻译成字符串class Solution {public: int ans = 0; int translateNum(int num) { string str = to_string(num); return helper(str); } int helper(const string str) { if(str.size() == 0 || str.size() == 1) {原创 2020-06-09 23:34:13 · 71 阅读 · 0 评论 -
剑指offer数组中重复的数字
数组中重复的数字时间O(n),空间O(n)(哈希表)bool duplicate(int numbers[], int length, int* duplication) { if(numbers==nullptr||length<=0) return false; for(int i=0;i<length;i++){ if(numbers[i]<0||numbers[i]>length-1)原创 2020-06-08 00:51:42 · 80 阅读 · 0 评论 -
剑指off面试题29. 顺时针打印矩阵
面试题29. 顺时针打印矩阵class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { /*判断是否为空*/ if(matrix.size() == 0 || matrix[0].size() == 0) return {}; /*设置上下左右四个界限*/ vector<int> res; /*存原创 2020-06-05 11:04:25 · 131 阅读 · 0 评论 -
剑指offer---面试题56 - I. 数组中数字出现的次数OR数组中只出现一次的数字
https://www.nowcoder.com/practice/e02fdb54d7524710a7d664d082bb7811?tpId=13&tqId=11193&tPage=2&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-rankinghtt...原创 2020-04-28 21:47:27 · 117 阅读 · 0 评论 -
剑指offer13机器人的运动范围(BFS,C++实现)
https://leetcode-cn.com/problems/ji-qi-ren-de-yun-dong-fan-wei-lcof/BFS注需要注意的是满足要求(行左边+列坐标位数<=k)不一定可达,即被不可达方格包围的解不应该计算在内,与代码中注释部分对所有row + col位数之和<=k的方格全部计算在内的实现进行对比class Solution { //BFSp...原创 2020-04-10 13:36:54 · 203 阅读 · 2 评论