当前位置: 首页 > news >正文

网站建设 甘肃简单的手机网站模板免费下载

网站建设 甘肃,简单的手机网站模板免费下载,wordpress 画图插件,wordpress数字减1一、题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 二、解题思路 解决这个问题的关键在于找到一个有效的算法来遍历数组并找到三…一、题目 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 二、解题思路 解决这个问题的关键在于找到一个有效的算法来遍历数组并找到三个数的组合使得它们的和最接近目标值。这里有一个常见的解题思路即使用双指针技巧。 以下是解决这个问题的 Java 实现步骤 首先对数组进行排序这样我们可以确保在遍历数组时我们能够以线性时间复杂度找到最接近目标值的三个数。初始化一个变量来存储当前找到的最接近目标值的和以及一个变量来存储当前的最小差值。使用一个循环遍历数组除了第一个元素对于数组中的每个元素称为固定元素使用两个指针分别指向固定元素的下一个元素和数组的最后一个元素。在每次迭代中计算三个元素的和并与目标值的差值进行比较。如果这个差值小于当前的最小差值更新最小差值和最接近的和。移动指针以尝试找到更接近目标值的组合。如果当前和大于目标值移动较小的指针因为它会使和减小如果当前和小于目标值移动较大的指针因为它会使和增大。当遍历完成后返回最接近目标值的和。 三、具体代码 import java.util.Arrays;class Solution {public int threeSumClosest(int[] nums, int target) {// Step 1: Sort the arrayArrays.sort(nums);// Step 2: Initialize variablesint closestSum nums[0] nums[1] nums[nums.length - 1];int minDiff Math.abs(target - closestSum);// Step 3: Loop through the arrayfor (int i 0; i nums.length - 2; i) {// Step 4: Use two pointersint left i 1;int right nums.length - 1;while (left right) {// Step 5: Calculate the sum and find the closestint currentSum nums[i] nums[left] nums[right];int currentDiff Math.abs(target - currentSum);// Update closestSum and minDiff if necessaryif (currentDiff minDiff) {closestSum currentSum;minDiff currentDiff;}// Step 6: Move pointersif (currentSum target) {left; // Increase sum} else if (currentSum target) {right--; // Decrease sum} else {// We found the exact sum, break the loopbreak;}}}return closestSum;} } 四、时间复杂度和空间复杂度 1. 时间复杂度 时间复杂度是 O(n^2)。数组排序操作 Arrays.sort(nums) 的时间复杂度是 O(n log n)其中 n 是数组的长度。接下来是两层循环。外层循环遍历数组除了第一个元素所以最多执行 n-1 次。内层循环使用两个指针最坏情况下会遍历整个数组即 O(n)。因此内层循环的时间复杂度是 O(n)。综合考虑整个算法的时间复杂度是 O(n log n)排序加上 O(n^2)双层循环但由于 O(n^2) 通常比 O(n log n) 大得多所以总的时间复杂度是 O(n^2)。 2. 空间复杂度 空间复杂度是 O(1)。除了输入数组和一些辅助变量如 closestSum 和 minDiff之外没有使用额外的数据结构。这些辅助变量的空间需求是常数级别的。因此空间复杂度是 O(1)即常数空间复杂度。 五、总结知识点 数组排序使用 Arrays.sort(nums) 方法对输入的整数数组进行排序。这是解决这个问题的基础因为排序后的数组可以使得后续的双指针算法更加高效。 双指针技巧在排序后的数组中通过使用两个指针left 和 right来遍历数组寻找和目标值最接近的三个数。这种技巧常用于解决涉及数组和目标值比较的问题。 循环控制代码中使用了 for 循环和 while 循环来控制算法的执行流程。for 循环用于遍历数组的每个元素而 while 循环则用于在找到合适的三个数之前不断调整指针位置。 条件判断在 while 循环中通过比较当前和 currentSum 与目标值 target 的大小关系决定是移动左指针增加和还是右指针减少和。 数学运算使用 Math.abs(target - currentSum) 来计算当前和与目标值的绝对差值这是确定最接近目标值的关键步骤。 变量更新在找到更接近目标值的和时更新 closestSum 和 minDiff 变量。这是动态编程思想的一个体现即在每一步中都保留当前最优解。 算法效率代码中考虑了算法的效率通过排序和双指针技巧将原本可能需要 O(n^3) 时间复杂度的问题降低到了 O(n^2)。 边界条件处理在 while 循环中当找到和等于目标值时使用 break 语句提前结束循环这是一种边界条件处理确保算法在找到最优解后不会继续执行不必要的操作。 代码可读性代码结构清晰注释详细有助于理解算法的每一步。良好的代码可读性对于维护和理解代码非常重要。 以上就是解决这个问题的详细步骤希望能够为各位提供启发和帮助。
http://www.zqtcl.cn/news/801128/

相关文章:

  • 少儿教育网站建设价格网页制作讲解视频
  • 网站开发方向的工作网站怎么做排名
  • 建设网站烧钱iis配置网站是什么
  • 新网站建设特色网站建设信息表
  • 商城做网站家具网站模板
  • 国有企业网站建设网站悬浮qq
  • 上海建站宝盒微网站生成app
  • 做网站是什么时候分页有哪些制作网站的公司
  • 专业柳州网站建设哪家好5千ip的网站能赚多少钱
  • 网站开发代理最火网页游戏
  • 做网站运营工资多少网站建设协议需要注意的问题
  • 如何建设一个人工智能网站qq头像网站源码
  • 有什么网站可以做外贸出口信息泉州网站制作运营商专业
  • 创业seo快速排名优化公司
  • 安丘网站开发王野天 女演员
  • 沈阳软件公司 网站制作wordpress未验证邮箱用户
  • 做动画上传网站赚钱么杭州市网站建设公司
  • 网站建设注意细节问题微信二维码
  • 凡科做的网站提示证书错误网络营销渠道可分为哪几种
  • 南京手机网站制作公司免费设计房屋效果图软件有哪些
  • 定制类网站怎么样做网页设计
  • 企业门户网站建设优势网站登录模版
  • 六盘水建设网站徐州建站平台
  • 昆明有多少做网站的公司公司软文代写
  • 东莞模板网站做一个电子商务网站在哪里做
  • 给别人网站做跳转株洲专业网站排名优化
  • 国外网站空间租用费用网站前端设计图
  • 宜州做网站点点网 xml转wordpress
  • 太原建站方法erp系统好上手吗
  • 网站建设如何实现检索功能河南城乡建设网站