zoukankan      html  css  js  c++  java
  • MS100 [011020]

    MS100 [011]

    求二叉树中节点的最大距离

    思路:在某个子树中,最大距离是左子树中最长枝到右子树中最长枝的距离。简单的递归,每次递归中,返回值用max(left,right)+1,当前节点所在子树的最大距离为max(left)+max(right),用一个引用变量记录最大的距离值

    MS100 [013]

    输出该链表中倒数第k个结点

    输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针。

    思路:设置两个指针p1,p2,p1和p2之间间隔k个节点。

    MS100 [014]

    两数之和为一定值

    输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是O(n)。

    思路:方案一、两个指针,一个头指针一个尾指针。和大于sum时尾减一,和小于sum时头加一。

    方案二、用sum减去这个数组得到新数组,比较两个数组中是否有相同的数字。

    MS100 [017]

    第一个出现一次的字符

    在一个字符串中找到第一个只出现一次的字符。
    如输入abaccdeff,则输出b。  

    思路:方案一,用一个数组或者HashTable统计字符出现次数,然后再次遍历字符串,找到第一个出现次数为1的字符。

    方案二,记录出现次数时,也记录第一次出现的位置。遍历字符串后,再遍历数组或者HashTable,找到出现次数为1的所有字符中第一次出现位置最小的那个。

    MS100 [018]

    约瑟夫问题

    n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
    每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
    当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
    求出在这个圆圈中剩下的最后一个数字。

    思路:存在数学递归解,f(1, m) = 0;f(n,m)=(f(n-1,m)+m)%n;

    int joseph(int n, int m) {
      int fn=0;
      for (int i=2; i<=n; i++) fn = (fn+m)%i; //当n远大于m时,此处可优化
      return fn;
    }

    O(n)的复杂度。

    MS100 [019]

    Fibonacci数列

    定义Fibonacci 数列如下:
    f(0) = 0 f(1)= 1
    f(n) = f(n-1)+f(n-2) n>=2
    输入n,用最快的方法求该数列的第n 项。

    思路:注意数值类型(long),并使用公式

    分治求矩阵的n次方,在O(log n)可解。

    MS100 [020]

    输入一个表示整数的字符串,把该字符串转换成整数并输出。

    思路:注意正负号,最开始的0,小数点,溢出等。


  • 相关阅读:
    object引入出现滚动条问题
    java
    读大道至简有感
    读大道至简第二章有感
    加和程序的流程图及代码
    Unity编程标准导引Unity中的基本概念2.1界面概览
    Unity编程标准导引2.2Unity中的基本概念
    Unity编程标准导引3.1 Component 组件脚本及其基本生命周期
    Unity编程标准导引3.2 MonoBehavior 组件父类重构
    Unity编程标准导引1.1下载和安装Unity
  • 原文地址:https://www.cnblogs.com/zhuyuanhao/p/3262875.html
Copyright © 2011-2022 走看看