剑指offer
Vermouth_su
这个作者很懒,什么都没留下…
展开
-
java根据元素出现的个数进行排序---hashmap、sort
给定一个正整数无序数组,按照出现的次数由少到多排序,如果两数次数相同则按照数由小到大排。例:给定数组:{3,3,3,2,2,4,4,1,8,7,7,7,7,6},排序结果为:[1, 6, 8, 2, 4, 3, 7]解析:1出现一次,6出现一次,8出现一次,按照1<6<8;2出现两次,4出现两次,按照2<4;3出现三次,7出现四次。提示:你可以使用Map,Java8 API来解决。我的解题:现将每个数与其出现的个数保存在hashmap中将hashmap的keySe...原创 2021-03-03 16:03:33 · 1497 阅读 · 1 评论 -
剑指offer 面试题65. 不用加减乘除做加法 [简单]
https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof/solution/mian-shi-ti-65-bu-yong-jia-jian-cheng-chu-zuo-ji-7/位运算搞不明白,就记住吧class Solution {public: int add(int a, i...原创 2020-05-03 00:21:00 · 138 阅读 · 0 评论 -
剑指offer 面试题60. n个骰子的点数 [简单]——动态规划
面试题60. n个骰子的点数class Solution {public: vector<double> twoSum(int n) { vector<vector<int>> dp(n+1,vector<int>(6*n+1,0)); for(int i=1;i<=6;i++) ...原创 2020-05-02 23:08:07 · 390 阅读 · 0 评论 -
剑指offer 面试题66. 构建乘积数组 [简单]
面试题66. 构建乘积数组class Solution {public: vector<int> constructArr(vector<int>& a) { int n=a.size(); vector<int> b(n,1); int tmp=1; for(int i...原创 2020-05-02 22:16:01 · 207 阅读 · 0 评论 -
剑指offer 面试题11. 旋转数组的最小数字 [简单]——二分
面试题11. 旋转数组的最小数字class Solution {public: int minArray(vector<int>& numbers) { int n=numbers.size(); int i=0,j=n-1; while(i<j){ int mid=(i+j)/2...原创 2020-05-02 17:16:57 · 136 阅读 · 0 评论 -
剑指offer 面试题12. 矩阵中的路径 [中等]
面试题12. 矩阵中的路径class Solution {public: bool exist(vector<vector<char>>& board, string word) { if(board.empty()) return false; for(int i=0;i<board.size();i+...原创 2020-05-02 16:58:51 · 140 阅读 · 0 评论 -
剑指offer 面试题16. 数值的整数次方 [中等]——快速幂
面试题16. 数值的整数次方class Solution {public: double myPow(double x, int n) { if(n==0) return 1; long N=n; if(n<0){ x=1/x; N=-N; } ...原创 2020-05-02 16:03:40 · 178 阅读 · 0 评论 -
剑指offer 面试题19. 正则表达式匹配 [困难] | LeetCode 10. 正则表达式匹配——动态规划
面试题19. 正则表达式匹配10. 正则表达式匹配class Solution {public: bool isMatch(string s, string p) { if(p.empty()) return s.empty(); int m=s.size()+1; int n=p.size()+1; ve...原创 2020-05-02 15:11:36 · 184 阅读 · 0 评论 -
剑指offer 面试题20. 表示数值的字符串 [中等]
面试题20. 表示数值的字符串这个示例太恶心了只有空格——false只有小数点——false(用bool num判断是否出现了数字)最后面可以是空格小数点可以在第1位,小数点可以在最后。。。这道题提交了十几遍,,,,因为这些辣鸡的边界条件class Solution {public: bool isNumber(string s) { i...原创 2020-05-01 23:40:39 · 125 阅读 · 0 评论 -
剑指offer 面试题26. 树的子结构 [中等]
面试题26. 树的子结构https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/submissions/注意func()函数中两个if的顺序class Solution {public: bool isSubStructure(TreeNode* A, TreeNode* B) { if(!A ||...原创 2020-05-01 22:56:39 · 133 阅读 · 0 评论 -
剑指offer 面试题68 - I. 二叉搜索树的最近公共祖先 [简单]——递归
面试题68 - I. 二叉搜索树的最近公共祖先原创 2020-05-01 22:18:14 · 289 阅读 · 0 评论 -
剑指offer 面试题31. 栈的压入、弹出序列 [中等]——贪心
面试题31. 栈的压入、弹出序列贪心模拟出栈入栈class Solution {public: bool validateStackSequences(vector<int>& pushed, vector<int>& popped) { int m=pushed.size(); int n=pushe...原创 2020-05-01 22:04:45 · 111 阅读 · 0 评论 -
剑指offer 面试题53 - II. 0~n-1中缺失的数字 [简单]——二分查找
我的解题:1.从头到尾的遍历需要注意理解题目,一定会缺一个数字的,前面的都匹配上的话,缺的就是n-1class Solution {public: int missingNumber(vector<int>& nums) { for(int i=0;i<nums.size();i++){ if(nums[...原创 2020-04-19 00:22:03 · 139 阅读 · 0 评论 -
剑指offer 面试题14- II. 剪绳子 II [中等]
我的解题:上一道剪绳子的题我用的也是动态规划,不过是两个for循环,一个一个算出来的参考大佬的题解,想要乘积越大3的个数就要越多class Solution {public: int cuttingRope(int n) { vector<long> dp(1001,0); dp[1]=1; dp[2]=1;...原创 2020-04-18 23:42:47 · 248 阅读 · 0 评论 -
剑指offer 面试题34. 二叉树中和为某一值的路径 [中等]——回溯
我的解题:先判断该路径是否可行,不可行就return可行就push进vector中,进一步判断是否是符合条件顺着进入下一个节点切回之前(pop——back())class Solution {public: vector<vector<int>> pathSum(TreeNode* root, int sum) { vec...原创 2020-04-18 23:14:07 · 113 阅读 · 0 评论 -
剑指offer 面试题33. 二叉搜索树的后序遍历序列 [中等]——递归
我的解题:后序遍历对于树和子树来说,父节点都在最后从前先后遍历找到第一个大于最后元素的位置,将序列分为三部分,左子树,右子树,根节点从刚找到的位置向后遍历,看是否每个节点都大于最后元素(小于就return false)class Solution {public: bool verifyPostorder(vector<int>& postord...原创 2020-04-18 21:56:50 · 188 阅读 · 0 评论 -
剑指offer 面试题28. 对称的二叉树 [简单]——层次、递归
我的题解:1.层次遍历真的太容易实现了,每次都先想到层次一次读取两个结点class Solution {public: bool isSymmetric(TreeNode* root) { if(!root) return true; queue<TreeNode*> q; TreeNode* a; ...原创 2020-04-18 16:40:09 · 133 阅读 · 0 评论 -
剑指offer 面试题55 - II. 平衡二叉树 [简单]
我的解题:1.每个节点都需要重复求高度class Solution {public: bool isBalanced(TreeNode* root) { if(!root) return true; if(isBalanced(root->left)&&isBalanced(root->right) ...原创 2020-04-17 21:12:38 · 148 阅读 · 0 评论 -
剑指offer 面试题15. 二进制中1的个数 [简单]
我的解题:1.将输入的整数逐位与1相与 int hammingWeight(uint32_t n) { int count=0; while(n){ for(int i=0;i<32;i++){ if(n&(1<<i)) count++; ...原创 2020-04-17 17:41:33 · 127 阅读 · 0 评论 -
剑指offer 面试题64. 求1+2+…+n [中等]——&&
我的解题:1.我发现我错了,,,不能用ifclass Solution {public: int sumNums(int n) { if(n==1) return 1; return n+sumNums(n-1); }};2.递归A && BA 为 true,计算并返回表达式 B 的 bool 值...原创 2020-04-16 19:57:24 · 167 阅读 · 0 评论 -
剑指offer 面试题55 - I. 二叉树的深度——递归/层次
我的解题:1.最喜欢用层次遍历,,,所以还是这个方法,queue里保存的是pair queue<pair<TreeNode*,int>>q; int是所在的层数class Solution {public: int maxDepth(TreeNode* root) { queue<pair<TreeNode*,i...原创 2020-04-17 13:47:42 · 163 阅读 · 0 评论 -
剑指offer 面试题54. 二叉搜索树的第k大节点 [简单]——中序
我的解题:用stack实现中序遍历,将二叉树从小到大的顺序保存在vector中class Solution {public: int kthLargest(TreeNode* root, int k) { stack<TreeNode*> s; vector<TreeNode*> v; int coun...原创 2020-04-17 15:42:48 · 153 阅读 · 0 评论 -
剑指offer 面试题53 - I. 在排序数组中查找数字 I [简单]
我的解题:1.先用二分查找找到target,在由该节点向左右遍历看有多少相等的class Solution {public: int search(vector<int>& nums, int target) { int i=0; int j=nums.size()-1; int count=0; ...原创 2020-04-16 23:34:03 · 323 阅读 · 0 评论 -
剑指offer 面试题39. 数组中出现次数超过一半的数字 [简单]
我的解题:1.使用unordered_map记录每个数值出现的次数,当等于数组长度一半时返回该数class Solution {public: int majorityElement(vector<int>& nums) { int mid=(nums.size()+1)/2; unordered_map<int,i...原创 2020-04-13 00:14:04 · 84 阅读 · 0 评论 -
剑指offer 面试题32 - II. 从上到下打印二叉树 II [简单]——queue
我的解题:因为先做的双向队列的那道题,所以这道题比较简单写,直接queue层次遍历即可class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(!roo...原创 2020-04-16 21:16:00 · 131 阅读 · 0 评论 -
剑指offer 面试题32 - I. 从上到下打印二叉树 [中等]——queue
我的解题:层次遍历class Solution {public: vector<int> levelOrder(TreeNode* root) { vector<int> res; if(root==NULL) return res; queue<TreeNode*> q; ...原创 2020-04-17 16:02:29 · 132 阅读 · 0 评论 -
剑指offer 面试题27. 二叉树的镜像 [简单]——递归/queue
我的解题:1.递归class Solution {public: TreeNode* mirrorTree(TreeNode* root) { if(!root) return nullptr; swap(root->right,root->left); mirrorTree(root->right);...原创 2020-04-17 13:09:19 · 108 阅读 · 0 评论 -
剑指offer 面试题18. 删除链表的节点 [简单]——双指针
我的解题:使用双指针,并定义一个头结点指向headclass Solution {public: ListNode* deleteNode(ListNode* head, int val) { ListNode* node=new ListNode(-1); node->next=head; ListNode* pre=...原创 2020-04-16 23:45:11 · 176 阅读 · 0 评论 -
剑指offer 面试题17. 打印从1到最大的n位数 [简单]
我的解题:先求出n位数的最大值,for循环压入vectorclass Solution {public: vector<int> printNumbers(int n) { vector<int> res; if(!n) return {}; int max=0; while(n--)...原创 2020-04-16 20:19:02 · 230 阅读 · 0 评论 -
剑指offer 面试题04. 二维数组中的查找 [简单]
题解:想了半天该怎么实现从左上角开始,发现太麻烦了原来右下角这么简单的class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.size()==0) return fals...原创 2020-04-16 20:54:55 · 163 阅读 · 0 评论 -
剑指offer 面试题32 - III. 从上到下打印二叉树 III [中等]——deque
我的解题:class Solution {public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(root==NULL) return res; bool flag=t...原创 2020-04-16 19:01:37 · 126 阅读 · 0 评论 -
剑指offer 面试题59 - I. 滑动窗口的最大值 [简单]——deque
我的解题:1,超暴力。。。没办法第一反应永远是暴力的,但是超时了纪念一下,还是发上来吧class Solution {public: int func(vector<int> v,int i,int k){ int res,max=0x80000000; for(int j=0;j<k;j++){ ...原创 2020-04-16 17:44:54 · 202 阅读 · 0 评论 -
剑指offer 面试题58 - II. 左旋转字符串 [简单]
我的解题:1.将前n个字符直接加在string的后面class Solution {public: string reverseLeftWords(string s, int n) { for(int i=0;i<n;i++) s+=s[i]; return string(s.begin()+n,s.end())...原创 2020-04-13 14:29:41 · 337 阅读 · 0 评论 -
LeetCode 56. 合并区间 [中等]——sort
我的解题:需要对vector进行排序,这样就方便比较左右端点了class Solution {public: vector<vector<int>> merge(vector<vector<int>>& intervals) { if(intervals.size()==0) return{}; ...原创 2020-04-16 13:42:41 · 81 阅读 · 0 评论 -
剑指offer 面试题40. 最小的k个数 [简单]——快速排序
我的解题:1.使用sort()对vector进行排序,将前k的元素插入vector<int> res中class Solution {public: vector<int> getLeastNumbers(vector<int>& arr, int k) { vector<int> res; ...原创 2020-04-13 14:17:09 · 192 阅读 · 0 评论 -
剑指offer 面试题58 - I. 翻转单词顺序 [简单]——istringstream/原地翻转
与LeetCode151题相同。我的解题:注意s为空或者只有空格的情况class Solution {public: string reverseWords(string s) { if(s.empty()) return ""; istringstream word(s); string w; str...原创 2020-04-12 23:02:42 · 231 阅读 · 0 评论 -
剑指offer 面试题50. 第一个只出现一次的字符 [简单]——unordered_map
我的解题:使用unordered_map和vector注意unordered_map和map的区别。map中的元素是按照二叉搜索树存储的,使用中序遍历可将键值按照从小到大遍历出来。(内部实现了一个红黑树)unordered_map内部实现了一个哈希表(也叫散列表,通过把关键码值映射到Hash表中一个位置来访问记录,查找的时间复杂度可达到O(1),其在海量数据处理中有着广泛应用)...原创 2020-04-12 22:56:13 · 149 阅读 · 0 评论 -
剑指offer 面试题14- I. 剪绳子 [中等]——动态规划
解题:用dp[i]保存长度为i时的绳子的最大乘积,它与之前所有0~i-1的最大乘积有关class Solution {public: //vector<int> arr; int cuttingRope(int n) { vector<int> dp(n+1,0); dp[1]=1; for(i...原创 2020-04-12 17:18:33 · 133 阅读 · 0 评论 -
剑指offer 面试题05. 替换空格 [简单]——for(auto c:s)
我的解题1.遍历string,逐个字符判断是否是空格class Solution {public: string replaceSpace(string s) { if(s.empty()) return ""; string res; for(int i=0;s[i];i++){ if(s[i]!...原创 2020-04-12 13:24:40 · 269 阅读 · 0 评论 -
剑指offer 面试题10- I. 斐波那契数列 [简单]——动态规划
与LeetCode 509 题相同我的解题:注意n是从零开始的class Solution {public: int fib(int n) { if(n==0) return 0; if(n==1) return 1; int *dp=new int[n+1]; dp[0]=0; ...原创 2020-04-12 13:12:48 · 260 阅读 · 0 评论