剑指Offer
你别教我打游戏
直面困难,重视过程,追求结果,淡忘过去。
展开
-
LeetCode 剑指 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* _rig原创 2021-12-03 14:28:37 · 74 阅读 · 0 评论 -
剑指 Offer 67. 把字符串转换成整数 (字符串模拟)
剑指 Offer 67. 把字符串转换成整数class Solution {public: int strToInt(string str) { int nega = 1; long long res = 0; int n = str.size(), i = 0; while(i < n && str[i] == ' ') ++i; if(i == n) return 0; if原创 2021-12-01 23:52:47 · 69 阅读 · 0 评论 -
剑指 Offer 62. 圆圈中最后剩下的数字(约瑟夫环)
剑指 Offer 62. 圆圈中最后剩下的数字class Solution {public: int lastRemaining(int n, int m) { int idx = 0; for(int len = 2; len <= n; len++) { // (m ---> 0, m + idx ---> idx) 模len意义下 // aka. old_idx = (new_idx + m原创 2021-12-01 20:53:48 · 76 阅读 · 0 评论 -
剑指 Offer 58 - I. 翻转单词顺序(简单字符串)
class Solution { public String reverseWords(String s) { String[] strs = s.trim().split(" "); // 删除首尾空格,分割字符串 StringBuilder res = new StringBuilder(); for(int i = strs.length - 1; i >= 0; i--) { // 倒序遍历单词列表 if(strs原创 2021-12-01 20:20:13 · 65 阅读 · 0 评论 -
剑指 Offer 65. 不用加减乘除做加法(位运算)
剑指 Offer 65. 不用加减乘除做加法class Solution { public int add(int a, int b) { // 理论知识 int sum = 0; int C = 0, S; // C表示临时进位,S表示临时结果 int X, Y; for (int i = 0; i < 32; ++i) { X = a & 1; Y =原创 2021-12-01 20:04:48 · 76 阅读 · 0 评论 -
剑指 Offer 66. 构建乘积数组(“前缀和”+“后缀和”)
class Solution {public: vector<int> constructArr(vector<int>& a) { int n = a.size(); vector<int> pre(n), post(n); for(int i = 0; i < n; i++) { pre[i] = (i > 0 ? pre[i - 1] : 1)* a[i];原创 2021-12-01 19:55:25 · 95 阅读 · 0 评论 -
剑指 Offer 60. n个骰子的点数(动态规划)
剑指 Offer 60. n个骰子的点数class Solution {public: vector<double> dicesProbability(int n) { vector<double> dp(6, 1.0 / 6.0); for (int i = 2; i <= n; i++) { vector<double> tmp(5 * i + 1, 0); for (i原创 2021-12-01 19:49:44 · 86 阅读 · 0 评论 -
剑指 Offer 30. 包含min函数的栈(单调栈)
剑指 Offer 30. 包含min函数的栈class MinStack { /** initialize your data structure here. */ Deque<Integer> st = new ArrayDeque<Integer>(), min = new ArrayDeque<Integer>(); public MinStack() { } public void push(int原创 2021-12-01 18:26:29 · 724 阅读 · 0 评论 -
剑指 Offer 39. 数组中出现次数超过一半的数字(选举算法)
class Solution {public: int majorityElement(vector<int>& nums) { int leader, cnt = 0; for(int i = 0; i < nums.size(); i++) { if(cnt == 0) { cnt = 1; leader = nums[i];原创 2021-12-01 17:32:32 · 264 阅读 · 0 评论 -
剑指 Offer 56 - I. 数组中数字出现的次数 (分组异或)
先对所有数字进行一次异或,得到两个出现一次的数字的异或值。在异或结果中找到任意为 11 的位。根据这一位对所有的数字进行分组。在每个组内进行异或操作,得到两个数字。class Solution {public: vector<int> singleNumbers(vector<int>& nums) { int res = 0; for(int x : nums) { res ^= x; .原创 2021-12-01 17:28:10 · 65 阅读 · 0 评论 -
剑指 Offer 56 - II. 数组中数字出现的次数 II(位运算)
class Solution {public: int singleNumber(vector<int>& nums) { int cnt[32] = {0}; for(int x : nums) { for(int i = 0; i < 32; i++) { cnt[i] += (x >> i) & 1; } }原创 2021-12-01 17:18:01 · 72 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列(滑动窗口)
剑指 Offer 57 - II. 和为s的连续正数序列(滑动窗口)class Solution {public: vector<vector<int>> findContinuousSequence(int target) { vector<vector<int>>vec; vector<int> res; for (int l = 1, r = 2; l < r;){原创 2021-12-01 17:10:50 · 74 阅读 · 0 评论 -
LeetCode 剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入、弹出序列class Solution { public boolean validateStackSequences(int[] pushed, int[] popped) { Stack<Integer> stack = new Stack<>(); int i = 0, len = popped.length; for(int x:pushed){ stack.a原创 2021-02-19 02:35:45 · 85 阅读 · 0 评论 -
LeetCode 剑指 Offer 16. 数值的整数次方 (快速幂)
剑指 Offer 16. 数值的整数次方class Solution { public double myPow(double x, int N) { if(x==0) return 0; long n = N; if(n<0) { n = -n; x = 1/x; } return pow(x,n); } double pow(double x,原创 2021-02-19 02:29:56 · 92 阅读 · 0 评论 -
LeetCode 剑指 Offer 38. 字符串的排列(DFS生成全排列、排序去重)
剑指 Offer 38. 字符串的排列class Solution {public: set<string> res; int len; vector<string> permutation(string s) { len = s.size(); permutation(s,0); return vector<string>(res.begin(),res.end()); } v原创 2021-02-17 12:55:21 · 80 阅读 · 0 评论 -
LeetCode 剑指 Offer 14- II. 剪绳子 II
剑指 Offer 14- II. 剪绳子 IIdp的话,有一种O(n3)O(n^3)O(n3)的做法。class Solution { public int cuttingRope(int n) { if (n <= 3) { return n-1; } /* 据 数学证明: 当 n >= 3时,因数 拆分成 3 的计算结果 较大 当 n原创 2021-02-16 22:01:52 · 83 阅读 · 0 评论 -
LeetCode 剑指 Offer 15. 二进制中1的个数
剑指 Offer 15. 二进制中1的个数class Solution {public: int hammingWeight(uint32_t n) { int cnt = 0; while(n){ cnt += (n&1); n >>= 1; } return cnt; }};原创 2021-02-16 21:21:44 · 70 阅读 · 0 评论 -
LeetCode 剑指 Offer 17. 打印从1到最大的n位数
剑指 Offer 17. 打印从1到最大的n位数class Solution {public: vector<int> printNumbers(int n) { int max = 1; while(n--) max *= 10; vector<int> ans; for(int i=1;i<max;i++){ ans.push_back(i); }原创 2021-02-16 21:15:47 · 58 阅读 · 0 评论 -
LeetCode 剑指 Offer 03. 数组中重复的数字
剑指 Offer 03. 数组中重复的数字class Solution {public: int findRepeatNumber(vector<int>& nums) { int n = nums.size(); for(int x:nums){ int id = x%n; nums[id] += n; if(nums[id]>=2*n) return id;原创 2021-02-16 20:45:07 · 69 阅读 · 0 评论 -
LeetCode 剑指 Offer 04. 二维数组中的查找
剑指 Offer 04. 二维数组中的查找class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int m = matrix.size(); if(m==0) return false; int n = matrix[0].size(); int j = n - 1 , i原创 2021-02-16 20:31:47 · 65 阅读 · 0 评论 -
LeetCode 剑指 Offer 05. 替换空格
剑指 Offer 05. 替换空格class Solution { public String replaceSpace(String s) { StringBuilder sb = new StringBuilder(); for(int i=0;i<s.length();i++){ if(s.charAt(i) == ' '){ sb.append("%20"); }else{原创 2021-02-16 20:23:59 · 71 阅读 · 0 评论 -
LeetCode 剑指 Offer 06. 从尾到头打印链表
剑指 Offer 06. 从尾到头打印链表递归有意思一些。reverse函数就没什么意思了。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: vector<int> an原创 2021-02-16 20:19:56 · 85 阅读 · 0 评论 -
LeetCode 剑指 Offer 10- I. 斐波那契数列
剑指 Offer 10- I. 斐波那契数列class Solution {public: int mod = 1e9+7; int fib(int n) { if(n<1) return 0; int a = 0, b = 1; for(int i=0;i<n-1;i++){ int c = a; a = b; b = (b+c)%mod;原创 2021-02-16 20:15:05 · 69 阅读 · 0 评论 -
LeetCode 剑指 Offer 10- II. 青蛙跳台阶问题
剑指 Offer 10- II. 青蛙跳台阶问题class Solution {public: int mod = 1e9+7; int res[2][2] = {{1,0},{0,1}}; int numWays(int n) { if(n==0) return 1; int A[2][2] = {{1,1},{1,0}}; quick_mul(A,n-1); return ((long long)res[0][0原创 2021-02-16 20:05:35 · 68 阅读 · 0 评论 -
LeetCode 剑指 Offer 12. 矩阵中的路径 (深搜)
剑指 Offer 12. 矩阵中的路径int dx[] = {1,0,-1,0};int dy[] = {0,1,0,-1};class Solution {public: bool vis[210][210] = {0}; vector<vector<char>> g; int m,n; bool exist(vector<vector<char>>& board, string word) {原创 2021-02-16 19:08:26 · 101 阅读 · 0 评论 -
LeetCode 剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围int dx[] = {1,0,-1,0};int dy[] = {0,1,0,-1};class Solution {public: bool vis[110][110] = {0}; int m,n,k; int movingCount(int m, int n, int k) { int ans = 0; this->m = m,this->n = n, this->k = k原创 2021-02-16 18:24:53 · 77 阅读 · 0 评论 -
LeetCode 剑指 Offer 09. 用两个栈实现队列
剑指 Offer 09. 用两个栈实现队列class CQueue { Stack<Integer> st1,st2; public CQueue() { st1 = new Stack<Integer>(); st2 = new Stack<Integer>(); } public void appendTail(int value) { st1.add(value);原创 2021-02-03 17:38:22 · 79 阅读 · 0 评论 -
LeetCode 剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点class Solution {public: ListNode* deleteNode(ListNode* head, int val) { if(head == nullptr || head->next==nullptr) return nullptr; if(head->val == val) return head->next; ListNode *pre = nullptr, *原创 2021-01-19 21:19:50 · 73 阅读 · 0 评论 -
LeetCode 剑指 Offer 27. 二叉树的镜像
二叉树的镜像class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if(root == nullptr) return nullptr; swap(root->left,root->right); mirrorTree(root->left); mirrorTree(root->right); return root;原创 2021-02-05 21:41:53 · 76 阅读 · 1 评论 -
LeetCode 剑指 Offer 51. 数组中的逆序对 (归并排序、离散化+树状数组)
剑指 Offer 51. 数组中的逆序对归并排序class Solution {public: int mergeSort(vector<int>& nums, vector<int>& tmp, int l, int r) { if (l >= r) { return 0; } int mid = (l + r) / 2; int inv_count =原创 2021-01-23 11:17:59 · 157 阅读 · 0 评论 -
LeetCode 剑指 Offer 52. 两个链表的第一个公共节点 (思维题)
两个链表的第一个公共节点/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { public ListNode getIn原创 2021-01-18 10:28:29 · 55 阅读 · 0 评论