
leetcode妙题
SinHao22
渺沧海之一粟
展开
-
剑指 Offer 16. 数值的整数次方
使用快速幂的方法求幂,将幂n换位2进制去求解。 如果用暴力求解的话是O(n),因为是一个x一个x乘的(一次跳一步),而转换成二进制会使每次跳的步数越来越大。时间复杂度优化为O(logn) class Solution { public: double myPow(double x, int n) { // 用二进制的思路更好理解 long ln = n; if(ln<0){ ln = -ln; x原创 2021-06-02 17:12:14 · 77 阅读 · 0 评论 -
523. 连续的子数组和
通过这道题,了解到了一个很有用的数学知识: 若 (a - b) 可以被k整除 则a % k = b % k 即,若a-b是k的倍数,则a和b分别除以k得到的余数相同。 题目 题解: class Solution { public: bool checkSubarraySum(vector<int>& nums, int k) { if(nums.empty()) return false; if(nums.size()<2) retu原创 2021-06-02 16:09:40 · 148 阅读 · 0 评论 -
剑指 Offer 28. 对称的二叉树
1. 题目 2. 思路 用递归,递归的步骤为: 1.将主问题正确分解为子问题; 2.假设一函数可以解决所有子问题,调用该函数,组合子问题的解来解决主问题; 3.确定递归出口; 4.无条件相信计算机。 1.子问题:判断以root为根结点的树的左右两棵子树是否对称; 2.确定假设函数以及通过子问题解决主问题:假设函数symmetry(L,R)可以判断L和R两棵树是否为对称树,接下来判断L的左子树和R的右子树、L的右子树和R的左子树是否为对称树,若都为对称树,则以root为根的树为对称树。 3.递归出口:原创 2021-05-16 12:04:23 · 91 阅读 · 0 评论 -
二叉树的两种中序遍历方法
1.递归 思路: 根据中序遍历的定义:递归遍历左子树、根节点、右子树。 代码: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(原创 2021-05-15 16:22:43 · 265 阅读 · 0 评论 -
剑指 Offer 48. 最长不含重复字符的子字符串
这道题的双指针解法觉得很妙,所以记录一下: 题目 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。 解答(C++) class Solution { public: int lengthOfLongestSubstring(string s) { if(s.empty()) return 0; vector<bool> used(250, false); int maxLength = 0, left =原创 2021-05-13 18:46:01 · 100 阅读 · 0 评论