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

网站制作开发重庆市建设工程信息网资质系统

网站制作开发,重庆市建设工程信息网资质系统,wordpress注册插件,微信小程序怎么删除题目 跳房子#xff0c;也叫跳飞机#xff0c;是一种世界性的儿童游戏游戏。参与者需要分多个回合按顺序跳到第1格直到房子的最后一格#xff0c;然后获得一次选房子的机会#xff0c;直到所有房子被选完#xff0c;房子最多的人获胜。 跳房子的过程中#xff0c;如果有踩…题目 跳房子也叫跳飞机是一种世界性的儿童游戏游戏。参与者需要分多个回合按顺序跳到第1格直到房子的最后一格然后获得一次选房子的机会直到所有房子被选完房子最多的人获胜。 跳房子的过程中如果有踩线等违规行为会结束当前回合甚至可能倒退几步.假设房子的总格数是count小红每回合可能连续跳的步数都放在数组steps中请问数组中是否有一种步数的组合可以让小红三个回合跳到最后一格?如果有请输出索引和最小的步数组合(数据保证索引和最小的步数组合是唯一的)。 注意:数组中的步数可以重复但数组中的元素不能重复使用 输入描述: 第一行输入为房子总格数count它是int整数类型 第二行输入为每回合可能连续跳的步数它是int整数数组类型 输出描述 返回索引和最小的满足要求的步数组合(顺序保持steps中原有顺序) 补充说明: count100003steps.length10000-100000steps[i]100000 示例1 输入: 9 [1,4,5,2,0,2] 输出: [4,5,0] 示例2 输入: 9 [1,5,2,0,2,4] 输出: [5,2,2] 示例3 输入: 12 [-1,2,4,9] 输出: [-1,4,9] 示例4: 输入 15 [1,9,4,25,10,8,7,5] 输出 [1,4,10] 说明 符合条件的步数集合有 [1,9,5] 它的下角标之和为:0178 [1,4,10] 它的下角标之和为:0246 因为68故输出[1,4,10]。 思路 两种思路 回溯法双指针 回溯法 列举所有的组合找到符合条件的组合排列组合思路详见【JAVA-排列组合】一个套路速解排列组合题 先只考虑三数之和等于目标值比如对于-4 -1 -1 0 1 2 5目标和为0 回溯遍历过程 -4 -1 -1 -4 -1 0 -4 -1 1 -4 -1 2 -4 -1 5 -1 -1 0 -1 -1 1 -1 -1 2 -1 -1 5 0 1 2 0 1 5 1 2 5 设第一二三位分别为i,j,k当i固定为-4j固定位-1时需要找的目标数字是5加起来和才为0回溯的过程对于k来说是依次遍历-1,012,5找到最后才出现5因为数组是按照从小到大排序的所以可以考虑最开始k就从最后一位开始找 如果最后一位都小于5那么其前面的数字不可能比5还大也就不必再找-4-1的组合了。 如果最后一位大于5那么ijk这三个数加起来肯定大于0此时需要将k左移可以使三个数的和相对小一点。 上面的优化过程就是双指针的思想。 双指针 根据上面的分析回溯法可能会超时所以推荐双指针法。 比如输入的数组是1,4,5,2,0,2目标数字是9 先将nums按照升序排序0 1 2 2 4 5 外层遍历k范围为0len-2; 内层设置两个变量i指向k1位置j指向最后一个位置如下 现在计算这三个数的和0156小于9将i右移动到下一个不同的值比如此时nums[2]、nums[3]均为2如果i2满足要求那么i3时也满足要求题目要求索引和的最小值所以要尽可能选则索引小的值这里就需要保证前面的2的索引是小于后面的2的索引的 此时和为7还是小于9继续将i右移动到下一个不同的值 此时和为9满足条件将此时的i,j,k存下来 依次类推再考虑k2,i3,jlen-1的情况。 以上思路基本能够找到三个不同的数让它们的和等于给定的数和题目在以下方面还有出入 题目要求输出索引和最小的组合输出的顺序需要于输入的顺序一致 要解决上面两个问题只需要新建一个对象House有两个属性值和索引。如果我们把输入的nums转为List House houses因为需要将nums按照值的升序排序所以house可以实现Comparable接口它按照值的升序排序当值相等时应该按照索引的升序排序当出现两个相同的数保证前面值的索引小于后面值的索引houses中存放了索引信息可以供后续比较得到最小的索引和而针对“输出的顺序需要于输入的顺序一致”当我们找到满足条件的组合时我们再按照对象中存放的索引重新按照从小到大排序即可。 题解 回溯法 package hwod;import java.util.*;public class JumpHouse {public static void main(String[] args) {Scanner sc new Scanner(System.in);int count sc.nextInt();sc.nextLine();String str sc.nextLine();int[] nums Arrays.stream(str.substring(1, str.length() - 1).split(,)).mapToInt(Integer::parseInt).toArray();int[] res jumpHouse(nums, count);StringBuilder sb new StringBuilder([);for (int i 0; i res.length; i) {if (i ! 0) sb.append(,);sb.append(res[i]);}sb.append(]);System.out.println(sb);}private static ListInteger res new ArrayList();private static int minestIndex Integer.MAX_VALUE;private static int[] jumpHouse(int[] nums, int count) {LinkedListInteger path new LinkedList();dfs(nums, 0, path, count, 0);return res.stream().mapToInt(i - i).toArray();}private static void dfs(int[] nums, int start, LinkedListInteger path, int target, int indexSum) {if (path.size() 3) {if (target 0 indexSum minestIndex) {minestIndex indexSum;res new ArrayList(path);}return;}for (int i start; i nums.length; i) {path.addLast(nums[i]);dfs(nums, i 1, path, target - nums[i], indexSum i);path.removeLast();}} } 双指针 package hwod;import java.util.*;public class JumpHouse2 {public static void main(String[] args) {Scanner sc new Scanner(System.in);int count sc.nextInt();sc.nextLine();String str sc.nextLine();int[] nums Arrays.stream(str.substring(1, str.length() - 1).split(,)).mapToInt(Integer::parseInt).toArray();ListHouse houses new ArrayList();for (int i 0; i nums.length; i) {houses.add(new House(i, nums[i]));}int[] res jumpHouse(houses, count);StringBuilder sb new StringBuilder([);for (int i 0; i res.length; i) {if (i ! 0) sb.append(,);sb.append(res[i]);}sb.append(]);System.out.println(sb);}private static int[] jumpHouse(ListHouse houses, int count) {Collections.sort(houses);int[] res new int[3];int minIdxSum Integer.MAX_VALUE;for (int k 0; k houses.size()-2; k) {if(houses.get(k).getVal()count) break;if(k0houses.get(k).getVal()houses.get(k-1).getVal()) continue;int i k 1, j houses.size() - 1;while (i j) {int sum houses.get(k).getVal() houses.get(i).getVal() houses.get(j).getVal();if (sum count) {while (ijhouses.get(i).getVal()houses.get(i).getVal());} else if (sum count) {while (ijhouses.get(j).getVal()houses.get(--j).getVal());} else {int idxSumhouses.get(k).getId() houses.get(i).getId() houses.get(j).getId();if (idxSum minIdxSum) {minIdxSum idxSum;ListHouse houseAns Arrays.asList(houses.get(k), houses.get(i), houses.get(j));houseAns.sort(Comparator.comparingInt(House::getId));res new int[]{houseAns.get(0).getVal(), houseAns.get(1).getVal(), houseAns.get(2).getVal()};}while (ijhouses.get(i).getVal()houses.get(i).getVal());while (ijhouses.get(j).getVal()houses.get(--j).getVal());}}}return res;}}class House implements ComparableHouse {private int id;private int val;public House(int id, int val) {this.id id;this.val val;}public int getId() {return id;}public void setId(int id) {this.id id;}public int getVal() {return val;}public void setVal(int val) {this.val val;}/*** 自定义排序按照val倒序索引升序排列,保证去重时始终选的较小值的索引* param o the object to be compared.* return*/Overridepublic int compareTo(House o) {if(o.valthis.val) return this.getId() - o.getId();return this.val - o.val;} }推荐 如果你对本系列的其他题目感兴趣可以参考华为OD机试真题及题解JAVA查看当前专栏更新的所有题目。
http://www.zqtcl.cn/news/332698/

相关文章:

  • wordpress网站如何网页设计实训总结3000字大学篇
  • 用ps怎么做网站导航条wordpress 开启缩略图
  • 网上销售型的企业网站为什么要域名备案
  • 唐山网站建设方案优化国内酷炫网站
  • 国外网站备案吗网站做一样没有侵权吧
  • 谷歌怎么建网站ps中怎样做网站轮播图片
  • 汕头有没有做网站廊坊宣传片制作公司
  • 百度快速收录网站有些人做网站不用钱的 对吗
  • 如何规划一个网站网站建设预付费入什么科目
  • 北京做网站的好公司有哪些网站建设杭州缘择低价
  • 建设网站团队张掖响应式建站平台
  • 中国建设之乡是哪里网站优化连云港哪家强?
  • 网站建设报价是多少30号长沙封城最新消息
  • 常州专业网站建设费用电商推广技巧
  • 辽源市网站建设南通营销网站开发
  • 新站优化案例去韩国用什么地图导航
  • 宁波网站制作与推广WordPress怎么文章分类
  • mvc 做网站国内的搜索引擎有哪些
  • 设计视频网站腾讯云服务器网站域名备案
  • 网站建设费算费用还是固定资产镇赉县做网站的
  • 山西 旅游 英文 网站建设wordpress 设置登陆界面
  • 电商网站系统建设考试深圳网站建设培训哪家好
  • 工作室 网站项目策划书八篇案例
  • ui做网站流程建设统计网站进不去
  • 沧州网站建设优化公司网站改版
  • 网站开发工程师好不好注册科技公司流程和费用
  • wordpress站点费用vs手表官网
  • 网站买卖需要注意什么景安怎么把网站做别名
  • 网站建设网站建怎么做一个门户网站
  • 站长工具域名备案查询安卓app开发教程视频免费