• TMCB其他备选电话面试题


    前一篇文章是我做的题 这是剩余的三道,都很基础。

    1. Write a method to generate the nth number of the Fibonacci sequence.

    Defined as

    f(0)=0

    f(1)=1

    f(n)=f(n-1)+ f(n-2) where n>1

    Sequence is 0 1 1 2 3 5…

    基础题,递归或者非递归方式

    public class Fib {
    
        public static int fib(int n) {
            int result;
            if (n <= 1) {
                return n;
            } else {
                result = fib(n - 2) + fib(n - 1);
            }
            return result;
        }
    
        public static int getNthFib(int n) {
            if (n <= 1)
                return n; // error & default input
            int fn2 = 1, fn1 = 1, index = 2; // starts from 2
            while (index < n) { // fn2 means f(n-2), fn1 means f(n-1)
                fn1 = fn1 + fn2;
                fn2 = fn1 - fn2;
                index++;
            }
            return fn1;
        }

    }

    注意fn1和fn2递增的赋值方式,比引入tmp变量更好的解决方案。


     

    3. Implement an algorithm to find the nth to last element of a singly linked list

    findNth(0) would return the last element of the list

    findNth(1) would return the second to last element of the list

     

    public Node findNthToLast(Node node)

    {

     

    }

     

    基本题,考察两个游标遍历单链表,需要注意边界条件和限制。

    public class LastNth {
        public static int findNth(Node head, int n) {
            if (head == null)
                return -1; // error, list is null
            Node fast = head, slow = head;
            int index = 1;
            while (index <= n) {
                if (fast.next != null) {
                    fast = fast.next;
                } else {
                    return -1; // error, list has less than n elements
                }
                index++;
            }
            while (fast.next != null) {
                fast = fast.next;
                slow = slow.next;
            }
            return slow.val;
        }
    }

     

    4. Write a method to decide if two strings are anagrams or not.

    基本题 需要考虑是否是ASCII码(256位)如果是的话那么定义相应位数的数组进行存储

     

    public class AnagramStr {
    
        public static boolean isAnagram(String s1, String s2) {
            int len1 = s1.length(), len2 = s2.length();
            if (len1 != len2) // not same length
                return false;
            int[] letters = new int[256];
            for (int i = 0; i < letters.length; i++) {
                letters[i] = 0;
            }
            for (char c : s1.toCharArray()) {
                ++letters[c];
            }
            for (char c : s2.toCharArray()) {
                --letters[c];
            }
            for (int i = 0; i < letters.length; i++) {
                if (letters[i] != 0) {
                    return false;
                }
            }
            return true;
        }
    }

     

    如果不限于ASCII,可以使用map来对不确定字符数进行统计。

    public static boolean areAnagram(String s1, String s2) {
        int len1 = s1.length(), len2 = s2.length();
        HashMap<Character, Integer> map1 = new HashMap<Character, Integer>(), map2 = new HashMap<Character, Integer>();
        if (len1 != len2) // not same length
            return false;
        for (char c : s1.toCharArray()) {
            if (map1.containsKey(c)) {
                map1.put(c, map1.get(c) + 1);
            } else {
                map1.put(c, 1);
            }
        }
        for (char c : s2.toCharArray()) {
            if (map2.containsKey(c)) {
                map2.put(c, map2.get(c) + 1);
            } else {
                map2.put(c, 1);
            }
        }
        if (!map1.equals(map2))
            return false;
        return true;
    }

    还有一个思路是对两个string进行排序,然后从头往后遍历。

     

  • 相关阅读:
    5月14日 游戏闯关,
    无名管道练习小程序
    关于对进程、线程的返回状态的获取的理解
    C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
    linux 与会话相关的一些概念、登录过程
    linux进程——fork、vfork 两函数的实现及两者区别
    关于 linux 中init 进程
    linux进程——fork()函数
    linux下 vim多屏幕操作
    linux下进程管理
  • 原文地址:https://www.cnblogs.com/t--c---/p/3779162.html
Copyright © 2020-2023  润新知