Leetcode 剑指系列 Day 23 数学
1.剑指 Offer 39. 数组中出现次数超过一半的数字
解题思路:
根据先序遍历和中序遍历的性质,每次遍历均可以确定一个中间节点和左右子树在数组中的位置,可以利用递归逐层建立树
算法过程:(prePosition为先序遍历的当前节点,inHead,inEnd为中序遍历下标范围)
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 1, temp = nums[0];
for(int i = 1; i < nums.size(); i++){
if(nums[i] != temp){
if(count != 1) count--;
else {
count = 1;
temp = nums[i];
}
}
else count++;
}
return temp;
}
};
2.剑指 Offer 66. 构建乘积数组
解题思路:
见代码
/*
b 1 2 3 4 5
b 9 1 3 4 5
b 9 2 1 4 5
b 9 2 3 1 5
b 9 2 3 4 1
*/
class Solution {
public:
vector<int> constructArr(vector<int>& a) {
vector<int> arr;
//arr.push_back(1);
//第一遍遍历下三角,从头部开始遍历
int temp = 1;
for(int i = 0; i < a.size(); i++){
arr.push_back(temp);
temp *= a[i];
}
//第二遍遍历上三角,从尾部开始遍历
temp = 1;
for(int i = a.size() - 1; i >= 0; i--){
arr[i] *= temp;
temp *= a[i];
}
return arr;
}
};