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

成品网站5668入口的功能介绍软件著作权登记证书

成品网站5668入口的功能介绍,软件著作权登记证书,网站流量少,网站建设选哪家1.搜索旋转排序数组 这道题要求时间复杂度为o#xff08;log n#xff09;#xff0c;那么第一时间想到的就是二分法#xff0c;二分法有个前提条件是在有序数组下#xff0c;我们发现在这个数组中存在两部分是有序的#xff0c;所以我们只需要对前半部分和后半部分分别…1.搜索旋转排序数组  这道题要求时间复杂度为olog n那么第一时间想到的就是二分法二分法有个前提条件是在有序数组下我们发现在这个数组中存在两部分是有序的所以我们只需要对前半部分和后半部分分别进行二分查找得到目标值就OK了。  可以发现的是我们将数组从中间分开成左右两部分的时候一定有一部分的数组是有序的。拿示例来看我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分其中左边 [4, 5, 6] 这个部分的数组是有序的其他也是如此。 这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid 1, r] 哪个部分是有序的并根据有序的那个部分确定我们该如何改变二分查找的上下界因为我们能够根据有序的那部分判断出 target 在不在这个部分 如果 [l, mid - 1] 是有序数组且 target 的大小满足 [nums[l],nums[mid])则我们应该将搜索范围缩小至 [l, mid - 1]否则在 [mid 1, r] 中寻找。如果 [mid, r] 是有序数组且 target 的大小满足 (nums[mid1],nums[r]]则我们应该将搜索范围缩小至 [mid 1, r]否则在 [l, mid - 1] 中寻找。 class Solution {public int search(int[] nums, int target) {int n nums.length;if (n 0) {return -1;}if (n 1) {return nums[0] target ? 0 : -1;}int l 0, r n - 1;while (l r) {int mid (l r) / 2;if (nums[mid] target) {return mid;}if (nums[0] nums[mid]) {if (nums[0] target target nums[mid]) {r mid - 1;} else {l mid 1;}} else {if (nums[mid] target target nums[n - 1]) {l mid 1;} else {r mid - 1;}}}return -1;} }2.组合就和 解题思路 例如输入集合 {3,4,5} 和目标整数 9 解为 {3,3,3},{4,5} 。需要注意两点输入集合中的元素可以被无限次重复选取。子集是不区分元素顺序的比如 {4,5} 和 {5,4} 是同一个子集。向「全排列」代码输入数组 [3,4,5] 和目标元素 9 输出结果为 [3,3,3],[4,5],[5,4] 。虽然成功找出了所有和为 9 的子集但其中存在重复的子集 [4,5] 和 [5,4] 。这是因为搜索过程是区分选择顺序的然而子集不区分选择顺序。如下图所示先选 4 后选 5 与先选 5 后选 4 是两个不同的分支但两者对应同一个子集。 重复子集剪枝 我们考虑在搜索过程中通过剪枝进行去重。观察下图重复子集是在以不同顺序选择数组元素时产生的具体来看第一轮和第二轮分别选择 3 , 4 会生成包含这两个元素的所有子集记为 [3,4,⋯] 。若第一轮选择 4 则第二轮应该跳过 3 因为该选择产生的子集 [4,3,⋯] 和 1. 中生成的子集完全重复。分支越靠右需要排除的分支也越多例如前两轮选择 3 , 5 生成子集 [3,5,⋯] 。前两轮选择 4 , 5 生成子集 [4,5,⋯] 。若第一轮选择 5 则第二轮应该跳过 3 和 4 因为子集 [5,3,⋯] 和子集 [5,4,⋯] 和 1. , 2. 中生成的子集完全重复。 class Solution {void backtrack(ListInteger state,int target,int[] choices,int start,ListListInteger res){//子集和等于target时记录解if(target0){res.add(new ArrayList(state));return;}//遍历所有的选择//剪枝二从start开始遍历避免生成重复子集for(int istart;ichoices.length;i){if(target-choices[i]0){break;}//尝试做出选择更新targetstartstate.add(choices[i]);backtrack(state,target-choices[i],choices,i,res);//回退撤销选择恢复到之前的状态state.remove(state.size()-1);}}public ListListInteger combinationSum(int[] candidates, int target) {ListInteger state new ArrayList();//状态子集Arrays.sort(candidates);int start0;//遍历起始点ListListInteger res new ArrayList();backtrack(state,target,candidates,start,res);return res;} } 3.缺失第一个正数 首先我们先用几个简单的例子来演示一下 ​ 第一个例子是 1 2 -1 4 5第一个不满足要求的元素就是-1对应下标就是 2先用肉眼看看我们在 1 2 -1 4 5情况下没有出现的最小的正整数很明显是 3。尝试着找规律—— 没有出现的最小的正整数第一个不满足要求的元素下标1 满足要求那么要求是什么呢 我们需要找到第一个不满足要求的元素下标 匹配成功的条件也就是数组的 元素值元素下标1 swap(当前位置元素----目的位置元素) 目的位置 nums[i] - 1 也就是 值为4的元素 要放到下标为 3 的位置 class Solution {public int firstMissingPositive(int[] nums) {int len nums.length;for(int i 0;ilenli){while(nums[i]0nums[i]lennums[nums[i]-1]!nums[i]){//满足在指定范围内并没有放在正确的位置上才交换//例如数组3应该放在索引2的位置上swap(nums,nums[i]-1,i);}}for(int i 0;ilen;i){if(nums[i]!i1){return i1;}}//都正确则返回数组长度1return len1;}peivate void swap(int[] nums,int index1, int index2){int temp nums[index1];nums[index1]nums[index2];nums[index2]temp;}} }
http://www.w-s-a.com/news/68944/

相关文章:

  • 温州网站推广网站建设要学会什么
  • c 网站开发框架品牌策划方案范文
  • 儿童摄影作品网站多元网络兰州网站建设
  • 电脑上不了建设厅网站常德网站建设费用
  • 做单页免费模板网站最新办公室装修风格效果图
  • 中国铁路建设投资公司网站熊学军想开网站建设公司
  • 优化一个网站多少钱网站开发北京
  • html教学关键词优化价格
  • 黄冈论坛网站有哪些给wordpress首页添加公告栏
  • 初中做数学题的网站做淘宝必备网站
  • 买拆车件上什么网站谁有那种手机网站
  • 一家专做有机蔬菜的网站万户网络是干嘛的
  • 十堰百度网站建设八宝山做网站公司
  • 地区电商网站系统建筑施工图纸培训班
  • 网站外包维护一年多少钱医院网站 功能
  • 电子商务市场的发展前景seo推广平台服务
  • 乐清网页设计公司哪家好seo推广任务小结
  • 360建筑网是什么pc优化工具
  • 越秀免费网站建设风景区网站建设项目建设可行性
  • 网站建站公司一站式服务学校网站开发招标
  • asp.net mvc 5 网站开发之美电商网站 流程图
  • 室内设计素材网站推荐郑州专业做淘宝网站建设
  • 新建的网站怎么做seo优化模板规格尺寸及价格
  • 平湖网站设计做电子元器件销售什么网站好
  • 可视化网站模板我想建个网站网站怎么建域名
  • 达州网站建设qinsanw南京市建设发展集团有限公司网站
  • django 网站开发实例公司排行榜
  • 韩国做美食网站阳江网站建设 公司价格
  • 网站开发哪里接业务长春高端模板建站
  • 深圳网站制作公司方案dw一个完整网页的代码