【计算数组连续值的移动距离】及【计算遥控器按键总次数】

news2024/11/20 18:24:10

计算数组连续值的移动距离及计算遥控器按键总次数

  • 计算数组连续值的移动距离
  • 计算遥控器按键总次数

计算数组连续值的移动距离

/**
     * 计算数组连续值的移动距离
     * 给定一个乱序的整数数组,数组中值为1~n,请计算出所有数字移动到比其大1的数字位置的距离和。
     * 比如数组:[2,4,1,3,7,9,5,10,6,8]
     * 1->2 距离为1
     * 2->3 距离为2
     * 3->4 距离为1
     * ....
     * 9->10 距离为1
     */
    public static int getNumDistance1(int[] nums) {
        // 思路1:直接双重for循环遍历,判断两者差值为1时候,计算两者索引距离之和
        int distance = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (Math.abs(nums[j] - nums[i]) == 1) {
                    distance += Math.abs(j - i);
                }
            }
        }
        return distance;
    }

    public static int getNumDistance2(int[] nums) {
        // 思路2:先将数组中的每个元素与其下标一一对应,存入一个hashmap中,其中元素作为key,下标作为value
        // 从1~n-1遍历数组,计算相邻的元素直接的距离,将距离累加
        int distance = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            map.put(nums[i], i);
        }
        for (int i = 1; i < nums.length; i++) {
            distance += Math.abs(map.get(i + 1) - map.get(i));
        }
        return distance;
    }

计算遥控器按键总次数

字母排列如下
在这里插入图片描述
遥控器按键
在这里插入图片描述

 /**
     * 计算遥控器按键总次数
     * 遥控器按键有上下左右和确认键,给定一个节目单(比如“9AA”),
     * 从第一个字母A出发,计算需要按键的次数,不可回走已经走过路线。
     * 每找到一个字母,需要按一次确认键。
     * 输入一个节目单字符串(字符均为合法字符,且均在遥控器字母表中),请输出总计按键次数。
     */
    public int minKeyDownCnt1(String nameStr) {
        String[][] array = {
                {"A", "B", "C", "D", "E", "F"},
                {"G", "H", "I", "J", "K", "L"},
                {"M", "N", "O", "P", "Q", "R"},
                {"S", "T", "U", "V", "W", "X"},
                {"Y", "Z", "0", "1", "2", "3"},
                {"4", "5", "6", "7", "8", "9"},
        };
        int count = 0;
        int[] index = new int[2];
        for (int i = 0; i < nameStr.length(); i++) {
            String tempStr = String.valueOf(nameStr.charAt(i));
            int tempCount = 0;
            for (int j = 0; j < array.length; j++) {
                for (int k = 0; k < array[0].length; k++) {
                    if (tempStr.equals(array[j][k])) {
                        tempCount = Math.abs(j - index[0]) + Math.abs(k - index[1]);
                        index = new int[]{j, k};
                        tempCount++;
                    }
                }
            }
            count += tempCount;
        }
        return count;
    }

    public int minKeyDownCnt2(String nameStr) {
        Map<Integer, List<String>> map = new HashMap<>();
        List<String> listOne = new ArrayList<>(Arrays.asList("A", "B", "C", "D", "E", "F"));
        List<String> listTwo = new ArrayList<>(Arrays.asList("G", "H", "I", "J", "K", "L"));
        List<String> listThree = new ArrayList<>(Arrays.asList("M", "N", "O", "P", "Q", "R"));
        List<String> listFour = new ArrayList<>(Arrays.asList("S", "T", "U", "V", "W", "X"));
        List<String> listFive = new ArrayList<>(Arrays.asList("Y", "Z", "0", "1", "2", "3"));
        List<String> listSix = new ArrayList<>(Arrays.asList("4", "5", "6", "7", "8", "9"));
        map.put(1, listOne);
        map.put(2, listTwo);
        map.put(3, listThree);
        map.put(4, listFour);
        map.put(5, listFive);
        map.put(6, listSix);
        int result = 0;
        String lastStr = "A";
        int lastIndex = 1;
        for (int i = 0; i < nameStr.length(); i++) {
            String str = String.valueOf(nameStr.charAt(i));
            for (Map.Entry<Integer, List<String>> entry : map.entrySet()) {
                List<String> value = entry.getValue();
                Integer curIndex = entry.getKey();
                if (value.contains(str)) {
                    result += Math.abs(value.indexOf(str) - map.get(lastIndex).indexOf(lastStr))
                            + Math.abs(curIndex - lastIndex) + 1;
                    lastStr = str;
                    lastIndex = curIndex;
                    break;
                }
            }
        }
        return result;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1416932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【vue2】路由之 Vue Router

文章目录 一、安装二、基础使用1、简单的示例2、动态路由2.1 定义动态路径参数2.2 获取动态路径的参数2.3 捕获所有路由 3、嵌套路由4、编程式的导航4.1 router.push4.2 router.replace4.3 router.go(n) 5、命名路由6、重定向 三、进阶1、导航守卫1.1 全局前置守卫1.2 全局后置…

1Panel CloudFlare证书申请失败的解决方案

在升级1Panel后&#xff0c;使用 CloudFlare DNS验证时&#xff0c;会提示 [*.biliwind.com] [*.biliwind.com] acme: error presenting token: cloudflare: failed to find zone biliwind.com.: ListZonesContext command failed: Invalid request headers (6003) 为解决此问…

如何在Arxiv上预发表自己的手稿

1. 使用latex编辑好自己的手稿。可以使用latex软件或者overleaf。尽量避免警告&#xff0c;否则会在上传到arxiv时出现意外的错误。 2. https://arxiv.org/登陆并注册arxiv账号 3. 点击 开始新的提交&#xff08;START NEW SUBMISSION&#xff09; 4. 主要的问题是参考文献的导…

C++:auto 关键字 范围for

目录 auto 关键字&#xff1a; 起源&#xff1a; auto的使用细则&#xff1a; auto不能推导的场景&#xff1a; 范围for&#xff1a; 范围for的使用条件&#xff1a; C的空指针&#xff1a; 注意&#xff1a; auto 关键字&#xff1a; 起源&#xff1a; 随着程序越…

全角色服务、全场景支撑、全业务应用的新一代智慧教室

新一代智慧教室以“数智化助力高质量人才培养”为核心目标&#xff0c;以AI赋能的智能硬件为基础构建多形态智慧教学环境&#xff0c;以中台为支撑实现数据、设备、系统、业务的互联互通、开放共享&#xff0c;以平台全面覆盖教学应用&#xff0c;采集、汇聚、挖掘、分析课前课…

【周赛】第382场周赛

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 从这一场&#xff08;第382场周赛&#xff09;周赛开始记录&#xff0c;目标是尽快达到准确快速AC前三道题&#xff0c;每场比赛…

【服务器GPT+MJ+GPTs】创建部署GPT+MJ+GPTs程序网站

目录 🌺【前言】 🌺【准备】 🌺【宝塔搭建GPT+MJ+GPTs】 🌼1. 给服务器添加端口 🌼2. 安装宝塔 🌼3. 安装Docker 🌼4. 安装ChatGPT程序 🌼5. 程序更新 🌼6. 修改端口 | 密码 🌼7. 绑定域名+申请SSL证书 🌺【前言】 相信大家都对openai的产品ch…

【2024】Docker部署Redis

1.说明&#xff1a; 因为容器实例的运行是有生命周期的&#xff0c;一些redis的备份、日志和配置文件什么的最好还是放在服务器本地。这样当容器删除时&#xff0c;我们也可以保留备份和日志文件。所以先在本地服务器安装redis并配置文件设置。下面是安装步骤: 2.安装步骤 1…

Unity 命令模式(实例详解)

文章目录 示例1&#xff1a;基础命令类结构示例2&#xff1a;旋转对象命令示例3&#xff1a;增加道具命令示例4&#xff1a;切换场景命令示例5&#xff1a;播放音效命令 在Unity中使用命令模式&#xff08;Command Pattern&#xff09;是一种常见的设计模式&#xff0c;用于实现…

LeetCode344反转字符串(java实现)

今天我们来分享的题目是leetcode344反转字符串。题目描述如下&#xff1a; 我们观察题目发现&#xff0c;题目要求使用O(1)的空间解决这一问题。那么我们就不能进行使用开辟新的数组进行反转了。 解题思路&#xff1a;那么该题的我得思路是使用双指针的方法进行题解&#xff0…

深度强化学习(王树森)笔记01

深度强化学习&#xff08;DRL&#xff09; 本文是学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接&#xff1a;https://github.com/wangshusen/DRL 源代码链接&#xff1a;https://github.c…

80.网游逆向分析与插件开发-背包的获取-自动化助手显示物品数据1

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;升级Notice类获得背包基址-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;3be017de38c50653b…

【算法专题】二分查找(进阶)

&#x1f4d1;前言 本文主要是二分查找&#xff08;进阶&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x1f304;每日…

【代码随想录】LC 242. 有效的字母异位词

文章目录 前言一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 前言 本专栏文章为《代码随想录》书籍的刷题题解以及读书笔记&#xff0c;如有侵权&#xff0c;立即删除。 一、题目 1、原题链接 242. 有效的字母异位词 2、题目描述 二、解题…

【c++】类和对象 - 类的引入和定义

1.类的引入 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。比如&#xff1a;之前在数据结构初阶中&#xff0c;用C语言方式实现的栈&#xff0c;结构体中只能定义变量&#xff1b;现在以C方式实现&#xff0c;…

java日志框架总结(三 、Log4j日志框架)

一、简介 Log4j ( Logger For Java ) , Java 日志的记录包。 官方网站 。Log4j 是 Apache 的一个开源项目&#xff0c; 为Java提供了日志记录功能。能够让程序员非常方便的记录日志&#xff0c; 并且提供了多种适配方式&#xff0c;能满足各种需求。 使用Log4j 只需要导入一个…

linux0.11源码看信号的处理流程

序 日常Linux写代码或者使用中难免会使用siganl&#xff0c;包括我们使用ctrl-c结束程序&#xff0c;使用kill命令发送信号&#xff0c;或者说程序core后操作系统向程序发送的信号&#xff0c;以及我们程序内部自定义的信号处理。 我们选择linux0.11一个原因是它比较简单&…

基于springboot宠物领养系统

摘要 随着社会的不断发展和人们生活水平的提高&#xff0c;宠物在家庭中的地位逐渐上升&#xff0c;宠物领养成为一种流行的社会现象。为了更好地管理和促进宠物领养的过程&#xff0c;本文基于Spring Boot框架设计和实现了一套宠物领养系统。该系统以用户友好的界面为特点&…

游戏开发丨基于Tkinter的扫雷小游戏

文章目录 写在前面扫雷小游戏需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于tkinter的扫雷小游戏 所需环境 pythonpycharm或anaconda 下载地址 https://download.csdn.net/download/m0_68111267/88790713 扫雷小游戏 扫雷是一款广为人知的单…

【SpringSpringBoot】概述

Spring&SpringBoot专题 【注】&#xff1a; 本专题围绕框架核心概念展开&#xff0c;渐进式深入总结学习、面试、开发经验&#xff0c;集中整理便于回顾 持续补充与施工中~~~~ 1.发展史 2.基本架构 Spring框架的基本架构是一个分层架构&#xff0c;包括多个模块&#x…