草庐IT

有效的字母异位词&两个数组的交集& 快乐数& 两数之和

neverlate 2023-03-28 原文

一、有效的字母异位词

242. 有效的字母异位词

1.方法概述

  • 因为本题中字符串只包含小写字母,就可以定义一个数组来记录字符串中字符出现的次数。遍历第一个字符串,用charAt拿到对应的小写字母然后减去'a'对应的ASCII值,得到一个相对数下标即可,然后对应下标的数组值++。同理另一个字符串采用--。最后遍历数组中是否存在不为0的元素,存在则说明两字符串中的字母出现的频率一定是不相同的。

2.具体实现

Java实现

点击查看代码
class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr = new int[26];
        for(int i=0;i<s.length();i++){
            arr[s.charAt(i)-'a']++;
        }

        for(int j = 0;j < t.length();j++){
            arr[t.charAt(j)-'a']--;
        } 

        for(int num : arr){
            if(num != 0){
                return false;
            }
        }
        return true;
    }
}

3.要点总结

  • 首先判断的是字母,字母的ASCII值在一定范围内是连续的,因此可以很好的对应数组下标。
  • 其次是通过数值下标对应值的加减操作来统计字符串中字母出现的频率是否相等。

二、两个数组的交集

349. 两个数组的交集

1.方法概述

  • 由于本题要求输出结果元素唯一,可以使用Set来解决本题的交集问题。首先创建一个遍历第一个数组,将其不重复的值存入到创建的set中。再遍历第二个数组,将其与set中包含的元素进行比较,如果相同则存入到创建的resultSet中,最后将reslutSet中的元素遍历转存到数组中输出。

2.具体实现

Java实现

点击查看代码
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums1) {
            set.add(num);
        }
        Set<Integer> resultSet = new HashSet<>();
        for (int num : nums2) {
            if (set.contains(num)) {
                resultSet.add(num);
            }
        }
        int[] result = new int[resultSet.size()];
        int i = 0;
        for (int num : resultSet) {
            result[i++] = num;
        }
        return result;
    }
}

3.要点总结

  • 输出结果中的每个元素唯一,也就是去重,且不考虑输出顺序,此时就联想到集合Set不包含重复元素的集合这一特性来解决。
  • Set集合中的元素需要使用增强for来遍历取出。

三、快乐数

202. 快乐数

1.方法概述

  • 首先考虑的是创建一个集合set来存放出现过的数字拆解平方之和,如果再次出现则证明该数字不是快乐数,因为重复出现必然会导致无限循环变不到1。接下来考虑如何拆分数字,我们可以使用一个while循环来重复这个过程,条件是这个数值是大于0的(题目要求快乐数是一个正数)。首先模取余,平方求和,然后再将n除去上一位数,再模取余平方求和。然后用while循环将每次求和数字进行判断是否符合不等于1且set集合不包含该数字的要求,如果不符合返回false,否则返回true。

2.具体实现

Java实现

点击查看代码
class Solution {
    private int getNextNumber(int n){
        int ret = 0;
        while(n>0){
            int tmp = n%10;
            ret += tmp*tmp;
            n = n/10;
        }
        return ret;
    }

    public boolean isHappy(int n) {
        Set<Integer> set = new HashSet<>();
        while(n != 1 && !set.contains(n)){
            set.add(n);
            n = getNextNumber(n);
        }
        return n == 1;
    }
}

3.要点总结

  • 一是要如何分解数字,%模是取余数,/是除取上一位上的数字。
  • 如何判断该数字在求和过程中是否会重复出现。

四、两数之和

1. 两数之和

1.方法概述

  • 本题既要查询数组值是否匹配,又要返回下标。我们可以考虑使用Map集合来解决该问题。因为返回的是数组类型的两个数值,这里我们定义一个大小为二的数组ret来存储结果。当数组为空时直接返回ret。接下来创建一个map,通过for循环来遍历目标值在数组中的由那两个数组成,且当前值和目标值的差值是否在之前遍历时出现过,如果没有则存入到map中,来存放下标当前遍历元素的值和下标。如果已近存在则将当前下标和差值下标存放到ret中然后break。最后返回ret。

2.具体实现

Java实现

点击查看代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] ret = new int[2];
        if(nums == null || nums.length == 0) return ret;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<nums.length;i++){
            int tmp = target - nums[i];
            if(map.containsKey(tmp)){
                ret[1] = i;
                ret[0] = map.get(tmp);
                break;
            }
             map.put(nums[i],i);
        } 
        return ret;
    }
}

3.要点总结

  • 为什么会使用Map来解决该问题?因为本题既要求查询该值是否满足条件同时又要返回下标,且要能去重,Map的特性正好满足。
  • 本题的map中的key用来存下标i,value用来存数组中i对应的值。

仅供个人学习参考,欢迎批评指正。

有关有效的字母异位词&两个数组的交集& 快乐数& 两数之和的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  4. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer

  7. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  8. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  9. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',

  10. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

随机推荐