当前位置: 首页 > 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.pierceye.com/news/801128/

相关文章:

  • 徽州网站建设企业网站备案域名信息
  • 广州建设信息网官方网站火车头采集wordpress发布
  • 易记域名网站大全火车票网站建设多少
  • 怎么将网站权重提上去怎样在网站图片做超级链接
  • 网站建设需求分析报告功能百度官方电话24小时
  • 扬州市城市建设监察支队网站做空比特币网站
  • 石家庄做网站 vtkj网站空间怎样设置用户名和密码
  • 自考网页制作与网站建设网站虚拟主机建设
  • 手机网站建站视频教程阿里云虚拟主机与网站吗
  • 孝感做招聘信息的网站鹏翔科技 网站建设
  • 阿里云 建设网站怎么样长春网站建设翻译
  • 网站空间位置是什么枝江企业网站
  • 网站到期查询固定ip做网站和域名区别
  • 北京专业网站制作大概费用红色网站建设的比较好的高校
  • 廊坊网站的优化html5网站地址
  • 少儿图书销售网站开发背景网络个性化定制
  • 网站制作价格情况微信输入法使用方法
  • 首饰网站建设策划案我的主页制作代码
  • 网站专题页面模板科技有限公司可以做网站建设吗
  • 物流企业网站建设特色吉林智能网站建设价格
  • 安徽省教育基本建设学会网站光明新区建设网站
  • 图片无法显示wordpress我是seo关键词
  • 设计商标的网站最新的电商资讯有哪些
  • 烟台开发区网站建设做家教中介网站赚钱吗
  • 商洛市建设工程造价管理站网站网站无障碍建设报告
  • 网站如何做原创广州网站优化关键词公司
  • 海门市城乡建设局网站深圳专业做网站专业
  • 网站首页的快照更新慢凉山建设机械网站
  • 怎么区分营销型网站如何建立公司的网站
  • 宁波网站建设鲤斯设计游戏网站上图片动态怎么做的