题目来源:
leetcode题目,网址:16. 最接近的三数之和 - 力扣(LeetCode)
解题思路:
对数组排序后,枚举第一个值,利用双指针在第一个值固定时的第二三个值。
解题代码:
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int res=-1;
int diff=-1;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
int targetSum=target-nums[i];
int left=i+1;
int right=nums.size()-1;
while(left<right){
if(res==-1 || abs(targetSum-nums[left]-nums[right])<diff){
res=nums[i]+nums[left]+nums[right];
diff=abs(targetSum-nums[left]-nums[right]);
if(diff==0){
break;
}
}
if(nums[left]+nums[right]>targetSum){
right--;
}else{
left++;
}
}
}
return res;
}
};
总结:
刚开始打算将以每个节点为根节点,通过辅助函数获得其左子树长度与右子树长度之后,再判断是否为平衡二叉树。但后来发现,递归求初始二叉树的深度过程中会同时求每个节点的左子树深度与右子树的深度,在得出两个结果后判断其差的绝对值是否小于2即可,不需要再利用辅助函数求初始二叉树的非根节点的左子树深度与右子树深度。