博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几道简单的算法题(来自leetcode)
阅读量:2062 次
发布时间:2019-04-29

本文共 3863 字,大约阅读时间需要 12 分钟。

大家好,我是烤鸭,不得不承认,这是水了一篇博客,贴几道最近刷的简单的算法题。

   1.    Lexico graphical Numbers

         给定一个整数n,按字典顺序返回1 - n。

         例如,给出13,返回:[1,10,11,12,13,2,3,4,5,6,7,8,9]。

         请优化您的算法以节省时间和空间。输入大小可能高达5,000,000。

public static List
lexicalOrder(int n) { List
ans = new ArrayList<>(n); for (int i = 1, curr = 1; i <= n; ++i) { ans.add(curr); if (curr * 10 <= n) { curr *= 10; } else { while (curr % 10 == 9 || curr == n) curr /= 10; curr++; } } return ans; } public static void main(String[] args) { System.out.println(lexicalOrder(13)); }

2.    Longest Absolute File Path

假设我们按照以下方式通过字符串来抽象我们的文件系统:

 该字符串"dir\n\tsubdir1\n\tsubdir2\n\t\tfile.ext"表示:
             dir
             subdir1
             subdir2

             file.ext

     该目录dir包含一个空的子目录subdir1和一个subdir2包含文件的子目录file.ext。
  该字符串"dir\n\tsubdir1\n\t\tfile1.ext\n\t\tsubsubdir1\n\tsubdir2\n\t\tsubsubdir2\n\t\t\tfile2.ext"表示:
             dir
             subdir1
             file1.ext
             subsubdir1
             subdir2
             subsubdir2

             file2.ext

该目录dir包含两个子目录subdir1和subdir2。subdir1包含一个文件file1.ext和一个空的二级子目录subsubdir1。subdir2包含一个subsubdir2包含文件的二级子目录file2.ext。

         我们感兴趣的是找到文件系统中文件的最长(字符数)绝对路径。例如,在上面的第二个例子中,最长的绝对路径是"dir/subdir2/subsubdir2/file2.ext",其长度是32(不包括双引号)。
         给定一个以上述格式表示文件系统的字符串,将最长的绝对路径的长度返回到抽象文件系统中的文件。如果系统中没有文件,则返回0。
            注意:
         文件的名称至少包含一个.和一个扩展名。
         目录或子目录的名称将不包含.。
         所需时间复杂度:O(n)这里n是输入字符串的大小。

         a/aa/aaa/file1.txt如果还有其他路径,请注意这不是最长的文件路径aaaaaaaaaaaaaaaaaaaaa/sth.png。

public static int lengthLongestPath(String input) {        Deque
stack = new ArrayDeque<>(); stack.push(0); // "dummy" length int maxLen = 0; for(String s:input.split("\n")){ int lev = s.lastIndexOf("\t")+1; // number of "\t" int pop = 0; while(lev+1

以上是对着discuss的高票答案改了改。

3.    Robot sequence of its moves

最初,位置(0,0)处有一个机器人。给出它的一系列动作,判断这个机器人是否有一个圆圈,这意味着它移回到原来的位置。

     移动顺序由一个字符串表示。而每一个动作都是由一个人物来表现的。有效的机器人移动是R(右),L(左),U(上)和D(下)。输出应该是真或假,表示机器人是否做出圆圈。
     例1:
     输入: “UD”
     输出: true
     例2:
     输入: “LL”

     输出:false

这题太简单了。。。。高票答案是用的switch,我用的if else。

public static boolean judgeCircle(String moves) {        Boolean flag = false;        int up =0,down =0,left =0,right =0;        for (char move:moves.toCharArray()) {            if(move == 'U') up++;            if(move == 'D') down++;            if(move == 'L') left++;            if(move == 'R') right++;        }        if(left == right && up == down) flag = true;        return flag;    }    public static void main(String[] args) {        System.out.println(judgeCircle("LL"));    }

4.    Find All Anagram sina String

    给定一个字符串小号和非空字符串p,找到的所有开始指数p中的字谜小号。

      字符串只包含小写英文字母,字符串s和p的长度不会超过20,100。
      输出的顺序并不重要。
      例1:
              输入: s:“cbaebabacd”p:“abc” 输出:[ 0,6 ] 

说明:

              起始索引= 0的子字符串是“cba”,它是“abc”的一个字母组合。
              起始索引= 6的子字符串是“bac”,它是“abc”的一个字母组合
      例2:

              输入: s:“abab”p:“ab” 输出: [0,1,2] 

说明:

              起始索引= 0的子字符串是ab,它是ab的一个字母组合
              开始索引= 1的子字符串是“ba”,它是“ab”的一个字母组合。

              起始索引= 2的子字符串是“ab”,它是“ab”的一个字母组合。

自己写的答案,效率没有高票的快。

public static List
findAnagrams(String s, String p) { //cbaebabacd ArrayList
list = new ArrayList<>(); char[] array = s.toCharArray(); for (int sir = 0; sir < array.length - p.length() + 1; sir++) { String sirs = s.substring(sir, sir + p.length()); char[] arraySirs = sirs.toCharArray(); char[] arrayP = p.toCharArray(); int sirRes = 0, pRes = 0; for (int l = 0; l < (arraySirs.length>arrayP.length?arraySirs.length:arrayP.length); l++) { sirRes += arraySirs[l] - 'a'; pRes += arrayP[l] - 'a'; } if (sirRes == pRes) list.add(sir); } return list; } public static void main(String[] args) { long first = System.nanoTime(); System.out.println(first); String s = "cbaebabacd"; String p = "abc"; System.out.println(findAnagrams(s, p)); System.out.println(System.nanoTime() - first); }

转载地址:http://qbmlf.baihongyu.com/

你可能感兴趣的文章
PHPstudy中遇到的坑No input file specified,以及传到linux环境下遇到的坑,模板文件不存在
查看>>
TP5.1事务操作和TP5事务回滚操作多表
查看>>
composer install或composer update 或 composer require phpoffice/phpexcel 失败解决办法
查看>>
TP5.1项目从windows的Apache服务迁移到linux的Nginx服务需要注意几点。
查看>>
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
计算机底层是什么东西?
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
安装系统之一 U盘启动盘制作
查看>>
安装系统之二 U盘启动盘制作---UEFI版
查看>>
安装系统之四 U盘装GHOST XP教程
查看>>
安装系统之五 U盘装原版XP教程
查看>>
安装系统之六 U盘装GHOST WIN7教程
查看>>
安装系统之八 U盘装GHOST WIN8教程
查看>>