D13 LeetCode 599.两个列表的最小索引和(简单)

2023-11-17

一、题目

二、思路(自己)

  • 先遍历两个数组,找出元素值相等的元素同时记录下标和,这时候我想到了要用到map,但是map不允许键值重复,我就一直在纠结怎么不让他更新或者记录相等键的元素值。然后想破了头也没想清楚,最后想着用list来记录,把 下标和放在字符串前面,然后通过sort工具类的排序算法可以把他们按照下标的大小升序排列,但是我没想到的是如果下标和是两位数的话,那就行不通了,如下代码:

class Solution {
    public  String[] findRestaurant(String[] list1, String[] list2) {
       // Map<Integer,String> map=new TreeMap<>();
        List<String> res=new ArrayList<>();
        //找出两个数组中相同的口味
        for (int i = 0; i < list1.length; i++) {
            String s1=list1[i];
            for (int j = 0; j <list2.length ; j++) {
                String s2=list2[j];
                if(s1.equals(s2)){
                    int sum=i+j;
                    String s=sum+s1;
                    res.add(s);
                }
            }
        }
        Collections.sort(res);
     //   System.out.println(res);
        String s3=res.get(0);
        int first= Integer.parseInt(s3.substring(0,1));
        List<String> ans=new ArrayList<>();
        ans.add(s3.substring(1));
        for (int i = 1; i <res.size() ; i++) {
            int s4= Integer.parseInt(res.get(i).substring(0,1));
            if(s4!=first)
                break;
            else ans.add(res.get(i).substring(1));
        }
       // System.out.println(ans);
        String[] s5=new String[ans.size()];
        return ans.toArray(s5);
    }
}

  •  KFC下标和为11,导致在比较时只比较了1,所以输出错误。
  • 现在的修改方法是,我觉得用list这条路行不通,还是用map进行存储,键为口味,值为下标和,修改比较器即可实现了。
  • 后发现原来treemap不能直接通过值来进行排序,只能通过把TreeMap的EntrySet转换成list,然后使用Collections.sort排序,说做就做
class Solution {
    public String[] findRestaurant(String[] list1, String[] list2) {
        Map<String,Integer> map=new TreeMap<>();
      //  List<String> res=new ArrayList<>();
        //找出两个数组中相同的口味
        for (int i = 0; i < list1.length; i++) {
            String s1=list1[i];
            for (int j = 0; j <list2.length ; j++) {
                String s2=list2[j];
                if(s1.equals(s2)){
                    map.put(list1[i],i+j);
                    break;
                }
            }
        }
        List<Map.Entry<String,Integer>> res=new ArrayList<>(map.entrySet());
        Collections.sort(res,(o1,o2)->o1.getValue().compareTo(o2.getValue()));
        int first=res.get(0).getValue();
        List<String> l=new ArrayList<>();
        l.add(res.get(0).getKey());
        for (int i = 1; i <res.size() ; i++) {
            if(res.get(i).getValue()!=first) break;
            l.add(res.get(i).getKey());
        }
        String[] s=new String[l.size()];
        return l.toArray(s);
    }
}

  • 这个题目官方定义的难度是简单,其实是挺简单的,但是由于我对Java比较器不够熟悉,导致废了一些功夫,花了将近两个小时才完成。不过通过这个题目我学到了集合比较器的使用和修改,再接再厉!
  • 写完看看评论区大佬们的解答,果然我还是太菜了,加油加油!!!

三、题解(官方)

  • 官方用的题解是哈希表index,先遍历list1,然后再查找list2中元素是否存在于index中,存在的话就是有相同口味的餐厅,记录下标和
class Solution {
    public String[] findRestaurant(String[] list1, String[] list2) {
        Map<String, Integer> index = new HashMap<String, Integer>();
        for (int i = 0; i < list1.length; i++) {
            index.put(list1[i], i);
        }

        List<String> ret = new ArrayList<String>();
        int indexSum = Integer.MAX_VALUE;
        for (int i = 0; i < list2.length; i++) {
            if (index.containsKey(list2[i])) {
                int j = index.get(list2[i]);
                if (i + j < indexSum) {
                    ret.clear();
                    ret.add(list2[i]);
                    indexSum = i + j;
                } else if (i + j == indexSum) {
                    ret.add(list2[i]);
                }
            }
        }
        return ret.toArray(new String[ret.size()]);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

D13 LeetCode 599.两个列表的最小索引和(简单) 的相关文章

随机推荐

  • WPS AI(海外版)使用体验分享

    最近很幸运的通过了WPS AI海外版的内测waitlist 这里和大家分享一下使用的体验和评价 申请与安装 WPS AI分为国内版和海外版两种 其中根据WPS自己的介绍 国内版本的模型由MinMax公司提供 海外版则是直接使用OpenAI的
  • OpenCV检测角点

    harris角点检测算法步骤 1 利用Soble计算出XY方向的梯度值 2 计算出Ix 2 Iy 2 Ix Iy 3 利用高斯函数对Ix 2 Iy 2 Ix Iy进行滤波 4 计算局部特征结果矩阵M的特征值和响应函数C i j Det M
  • Win7下U盘安装Ubuntu14.04双系统步骤详解

    Win7下U盘安装Ubuntu14 04双系统步骤详解 百度经验 http jingyan baidu com article 76a7e409bea83efc3b6e1507 html
  • 数据模型:数字化转型的核心能力

    业界数字化转型已经进入深水区 数据越来越受到大家重视 由于数据中台等等概念的兴起 大家越来越回到数据的根本问题 数据模型 今天不谈论高大上的数据中台 我想回到数据的本源 谈谈接地气的数据模型 大数据产业创新服务媒体 聚焦数据 改变商业 什么
  • Topaz Gigapixel AI 4.1.2 特别版 Mac 图片无损放大软件

    Topaz AI Gigapixel是一款由Topaz Labs公司开发的mac 软件 它使用深度学习技术 可以实现图片无损放大 使低分辨率图片转换成高分辨率 高质量的图片 还能够自动弥补图片损失的细节 增强画质 其实 对于像素图而言 无损
  • 想去谷歌工作?15个面试问题据说难倒天才!

    11月 15 日消息 谷歌公司的面试题在刁钻古怪方面相当出名 科技博客 BusinessInsider 贴出了 15 道谷歌面试题 并一一给出了答案 第一题 多少只高尔夫球才能填满一辆校车 职位 产品经理 解析 通过这道题 谷歌希望测试出求
  • 华为OD机试 - 找到比自己强的人数(Java)

    题目描述 给定数组 2 1 3 2 每组表示师徒关系 第一个元素是第二个元素的老师 数字代表排名 现在找出比自己强的徒弟 输入描述 无 输出描述 无 用例 输入 2 1 3 2 输出 0 1 2 说明 输入 第一行数据 2 1 表示排名第
  • 多益网络2022春笔试题记忆版

    多益网络笔试题 自己做完之后凭记忆整理出来的 填空题 数据结构 数据库 相对没那么难 所以只记了几个 选择题 1 A B C栈的出栈序列可能性有几种 2 关于队列 3 插入数据库表 name char 20 not null age cha
  • 毕业设计- 基于机器视觉的交通标志检测系统

    目录 前言 课题背景和意义 实现技术思路 一 交通标志检测识别理论基础 二 基于单阶段算法的交通标志检测 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量
  • [Intel汇编-NASM]基本语法

    1 NASM编译器介绍 1 Netwide Assembler 是目前唯一开源且免费的汇编器 2 该汇编器只提供编译的功能 但不提供连接的功能 在Linux下编译器产生 o文件后还需要使用ld链接器和操作系统的库链接才能形成可执行文件 而在
  • 男人怎么读 萨瓦迪卡!还是萨瓦迪卡不!

    泰国旅游中问候语 你好 是十分常见的 很早就听闻男同胞说萨瓦迪卡是不正确的 结果百度的结果是这样的 通篇并没有说正确的读音 修改关键词吧终于在知道里面找到想要的 是梵文 sawat 表示祝福 好运 dee表示好 sawatdee 表示 你好
  • 完成该操作所需的数据还不可使用

    原因是没有加下面两个判断条件 if xmlhttp readyState 4 if xmlhttp status 200
  • 【目标检测】从头到尾教你安装MMDetection(超详细版本)

    目录 MMDetection的安装过程 前言 一 本地环境 二 先决条件 1 从官方网站下载并安装Anaconda 2 创建 conda 环境并激活它 3 按照官方说明安装 PyTorch 例如 三 配置PyTorch环境时出现的第一个错误
  • vue引入elementUI部分组件库

    package json中加入 babel plugin component 1 1 1 借助 babel plugin component 我们可以只引入需要的组件 以达到减小项目体积的目的 如果你 只希望引入部分组件 比如 Button
  • AI学习_过拟合的细节,及其解决方法【未完成】

    要标准化 归一化的原因 把数据保留在 1 1之间 防止数值太大 发生梯度弥散 什么时候用标准化 什么时候用归一化 连续数据就用标准化 ps 但0不代表 大小 时 就不能用标准化了 BN的含义 标准化的意义 是统一量纲 BN其实是在nchw中
  • 小皮面板开启apache服务错误(主要是80端口被占用)

    在小皮面板中开启apache时出现这样的报错 98 Address already in use AH00072 make sock could not bind to address 80 98 Address already in us
  • 富士施乐3065扫描教程_富士施乐怎么设置扫描到PC

    展开全部 1 将复印机的IP输入在IE的地址栏里 32313133353236313431303231363533e59b9ee7ad9431333365666232用户名是11111 密码是x admin 进去以后找到协议下的9100项
  • Axure Share ——原型设计工具 Axure ,移动版

    什么是Axure Share Axure Share 是老牌原型设计工具Axure 的移动版 app 支持 iOS iPhone iPad 以及 Android 设备 我们可以使用它来查看和演示通过 Axure 制作的移动 app 原型 A
  • Vuex之理解mutation的用法

    一 什么是mutation 通俗的理解mutations 里面装着一些改变数据方法的集合 这是Veux设计很重要的一点 就是把处理数据逻辑方法全部放在mutations里面 使得数据和视图分离 切记 Vuex中store数据改变的唯一方法就
  • D13 LeetCode 599.两个列表的最小索引和(简单)

    一 题目 二 思路 自己 先遍历两个数组 找出元素值相等的元素同时记录下标和 这时候我想到了要用到map 但是map不允许键值重复 我就一直在纠结怎么不让他更新或者记录相等键的元素值 然后想破了头也没想清楚 最后想着用list来记录 把 下