华为机试-HJ9 提取不重复的整数

109 阅读1分钟

题目

image.png

www.nowcoder.com/practice/[2…](www.nowcoder.com/practice/25…)

我的题解

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        List<Character> list = new ArrayList<>();
        StringBuffer sb = new StringBuffer();
        while ((str = bf.readLine()) != null) {
            char[] arr = str.toCharArray();
            for (int i = arr.length - 1; i >= 0; i--) {
                if (list.contains(arr[i])) {
                    continue;
                }
                list.add(arr[i]);
                sb.append(arr[i]);
            }
            System.out.println(sb);
        }
    }
}

image.png

思路:

1、 list.contains 做重复校验、 StringBuffer 拼接取到的值

2、还是类似递归那个思想、终止条件+终止行为+重复行为

3、List<Character> list = new ArrayList<>(); list可以放Character

参考题解:

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            char[] chars = str.toCharArray();

            LinkedHashSet<Character> set = new LinkedHashSet<>();
            for (int i = chars.length - 1; i >= 0; i--) {
                set.add(chars[i]);
            }

            String s = "";
            Iterator<Character> it = set.iterator();
            while (it.hasNext()) {
                s += it.next();
            }

            System.out.println(s);
        }
    }
}

image.png 总结:

1、LinkedHashSet<Character> set = new LinkedHashSet<>(); LinkedHashSet就是有序唯一

2、 迭代器循环set、回头需要巩固集合的各种循环

Iterator<Character> it = set.iterator(); 
while (it.hasNext()) { 
    s += it.next(); 
}

3、 对比一下StringBuilderStringBufferString+ 的性能、在几个字符串拼接的时候看起来差别不大

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            char[] chars = str.toCharArray();

            LinkedHashSet<Character> set = new LinkedHashSet<>();
            for (int i = chars.length - 1; i >= 0; i--) {
                set.add(chars[i]);
            }

            StringBuffer sb = new StringBuffer();
            Iterator<Character> it = set.iterator();
            while (it.hasNext()) {
                sb.append(it.next());
            }

            System.out.println(sb);
        }
    }
}

image.png

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            char[] chars = str.toCharArray();

            LinkedHashSet<Character> set = new LinkedHashSet<>();
            for (int i = chars.length - 1; i >= 0; i--) {
                set.add(chars[i]);
            }

            StringBuilder sb = new StringBuilder();
            Iterator<Character> it = set.iterator();
            while (it.hasNext()) {
                sb.append(it.next());
            }

            System.out.println(sb);
        }
    }
}

image.png

高效题解

import java.io.InputStream;

public class Main {

    public static void main(String[] args) throws Exception {
        InputStream in = System.in;
        int available = in.available()-1;
        char[] chars = new char[available];
        while (available-- > 0) {
            chars[available] = (char) in.read();
        }
        StringBuilder resul = new StringBuilder();
        for (int i = 0; i < chars.length; i++) {
            if (resul.lastIndexOf(String.valueOf(chars[i])) != -1){
                continue;
            }
            resul.append(chars[i]);
        }
          System.out.println(resul.toString());
    }

}

image.png

总结:

1、 排名说1ms、可是我本地执行也是13ms

2、用了位运算、工作中使用少不花经历去研究