目录
剑指 Offer 04. 二维数组中的查找
剑指 Offer 50. 第一个只出现一次的字符
剑指 Offer 11. 旋转数组的最小数字
剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - II. 从上到下打印二叉树 II
剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 04. 二维数组中的查找
在一个 n * m 的二维数组中,每一行都按照从左到右 非递减 的顺序排序,每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.empty())return false; int row = matrix.size(); int col = matrix[0].size(); int i = 0, j = col-1; while(i<row && j>=0) { if(target<matrix[i][j]) j--; else if(target>matrix[i][j]) i++; else return true; } return false; } };
剑指 Offer 50. 第一个只出现一次的字符
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
哈希存储 二次遍历
class Solution { public: char firstUniqChar(string s) { map<char, int> mp; for(auto e : s) mp[e]++; for(auto e : s) { if(mp[e]==1) return e; } return ' '; } };
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。class Solution { public: int minArray(vector<int>& numbers) { int begin = 0; int end = numbers.size()-1; while(begin<end) { int mid = (begin+end)/2; if(numbers[mid] < numbers[end]) end = mid; else if(numbers[mid] > numbers[end]) begin = mid+1; else end-=1; } return numbers[begin]; } };
剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],3
/ \
9 20
/ \
15 7返回:
[3,9,20,15,7]
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * 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: vector<int> levelOrder(TreeNode* root) { queue<TreeNode*> q; vector<int> res; if(root)q.push(root); while(!q.empty()) { int size = q.size(); while(size--) { TreeNode* cur = q.front(); q.pop(); res.push_back(cur->val); if(cur->left)q.push(cur->left); if(cur->right)q.push(cur->right); } } return res; } };
剑指 Offer 32 - II. 从上到下打印二叉树 II
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],3
/ \
9 20
/ \
15 7返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * 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: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; vector<vector<int>> res; if(root)q.push(root); while(!q.empty()) { int size = q.size(); vector<int> temp; while(size--) { TreeNode* cur = q.front(); q.pop(); temp.push_back(cur->val); if(cur->left)q.push(cur->left); if(cur->right)q.push(cur->right); } res.push_back(temp); } return res; } };
剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],3
/ \
9 20
/ \
15 7返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。/** * 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: vector<vector<int>> levelOrder(TreeNode* root) { queue<TreeNode*> q; vector<vector<int>> res; if(root)q.push(root); int flag = 0; while(!q.empty()) { int size = q.size(); vector<int> temp; while(size--) { TreeNode* cur = q.front(); q.pop(); temp.push_back(cur->val); if(cur->left)q.push(cur->left); if(cur->right)q.push(cur->right); } if(flag%2==1) reverse(temp.begin(),temp.end()); flag+=1; res.push_back(temp); } return res; } };