• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 人民搜索實習生招聘筆試題

        時間:2022-10-14 16:49:41 筆試題目 我要投稿
        • 相關推薦

        人民搜索實習生招聘筆試題

          1、打印漢諾塔移動步驟,并且計算復雜度。

        人民搜索實習生招聘筆試題

          方法是遞歸,將n-1層移到中間柱,然后將最底層移到目標柱,然后再把n-1層移到目標柱。

          f(n) = 2f(n-1) + 1 , f(1) = 1

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

          f(n) = 2^n - 1

          T(n) = O(2^n);

          2、計算兩個字符串的是否相似(字符的種類,和出現次數相同)

          3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數。

          任意一種方式遍歷二叉樹,如果值在 [a,b] 之間,計數器+1

          4、一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑里,從a跳到b最少幾步?(動態規劃題)

          動態轉移方程

          f(n) = min( f(大于n的第一個平方數 -n) ,f(n- 小于n的第一個完全平方數) +1 )

          【 補充 ing

          在一個坐標軸上, 給定兩個點,一個起點,一個終點,起點有一個方塊,方塊可以左右移動,但是移動的長度只能是平方數長(1,4,9,16 ••••) ,同時坐標軸上還有洞,移動的過程中不能越過這個洞,不然會掉下去,問 由起點到終點 至少需要多少次移動,不能到達返回-1】

          5、給一個整數數組,求數組中重復出現次數大于數組總個數一半的數。

          int MoreThanHalfNum(int *a , int n )

          {

          int i , k , num = a[0];

          int times = 1;

          for(i = 1 ; i < n ; ++i)

          {

          if(times == 0)

          {

          num = a[i];

          times = 1;

          }

          else if(a[i] != num)

          --times;

          else

          ++times;

          }

          k = 0;

          for(i = 0 ; i < n ; ++i)

          {

          if(a[i] == num)

          ++k;

          }

          if(k*2 <= n)

          return -1; //沒有找到

          else

          return num; //找到

          }

          6、一個128bits 的二進制流,要求找出 里面包含 某8bits 二進制流的數目。

          如果只是一個128bit的流,那就用int對其某個字節,然后移位比較,然后int向后移動3個字節,繼續移位比較。如果是很多128bit的流,可以模仿kmp,用上面的方法,每次取int的8bit和目標8bit進行AND操作,結果只有256種可能,事先存一個256的表,查表決定向后跳躍的bit數。

          7、交換整型的奇數位和偶數位

          問題定義:

          Write a program to swap odd and even bits in an integer with as few instructions as possible(e.g, bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc)

          int SwapOddEvenBit(int x)

          {

          return ( ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));

          }

          int main(void)

          {

          int a = 171;

          printf("%d\n", SwapOddEvenBit(a));

          return 0;

          }

          8、試著用最小的比較次數去尋找數組中的最大值和最小值。

          解法一:

          掃描一次數組找出最大值;再掃描一次數組找出最小值。

          比較次數2N-2

          解法二:

          將數組中相鄰的兩個數分在一組, 每次比較兩個相鄰的數,將較大值交換至這兩個數的左邊,較小值放于右邊。

          對大者組掃描一次找出最大值,對小者組掃描一次找出最小值。

          比較1.5N-2次,但需要改變數組結構

          解法三:

          每次比較相鄰兩個數,較大者與MAX比較,較小者與MIN比較,找出最大值和最小值。

          方法如下:先將一對元素互相進行比較,然后把最小值跟當前最小值進行比較,把最大值跟當前最大值進行比較。因此每兩個元素需要3次比較。如果n為奇數,那么比較的次數是3*(n/2)次比較。如果n為偶數,那么比較的次數是3n/2-2次比較。因此,不管是n是奇數還是偶數,比較的次數至多是3*(n/2),具體的代碼如下:

          void GetMaxAndMin(int *arr , int n , int &max , int &min)

          {

          int i = 0 ;

          if(n & 1) // 奇數

          {

          max = min = arr[i++];

          }

          else

          {

          if(arr[0] > arr[1])

          {

          max = arr[0];

          min = arr[1];

          }

          else

          {

          max = arr[1];

          min = arr[0];

          }

          i += 2;

          }

          for( ; i < n ; i += 2)

          {

          if(arr[i] > arr[i+1])

          {

          if(arr[i] > max)

          max = arr[i];

          if(arr[i+1] < min)

          min = arr[i+1];

          }

          else

          {

          if(arr[i+1] > max)

          max = arr[i+1];

          if(arr[i] < min)

          min = arr[i];

          }

          }

          }

        《&.doc》
        将本文的Word文档下载到电脑,方便收藏和打印
        推荐度:
        点击下载文档

        【人民搜索實習生招聘筆試題】相關文章:

        人民銀行招聘筆試題07-25

        人民銀行招聘筆試題07-31

        208年人民銀行招聘試題02-12

        2016阿里實習生招聘筆試題08-04

        中國人民銀行招聘試題07-30

        招聘網上搜索簡歷技巧02-20

        中國人民銀行招聘筆試題07-11

        中國人民銀行招聘筆試題02-18

        深創投實習生招聘筆試題目08-10

        中國人民銀行招聘筆試題302-24

        在线咨询
        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 色男人在线视频免费观看 | 一本大道AV伊人久久精品 | 五月天手机福利视频 | 亚洲欧美国产另类首页 | 日本免费精品一区二区三区 | 亚洲欧美中文日韩v在线观看不卡 |

            人民搜索實習生招聘筆試題

              1、打印漢諾塔移動步驟,并且計算復雜度。

            人民搜索實習生招聘筆試題

              方法是遞歸,將n-1層移到中間柱,然后將最底層移到目標柱,然后再把n-1層移到目標柱。

              f(n) = 2f(n-1) + 1 , f(1) = 1

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

              f(n) = 2^n - 1

              T(n) = O(2^n);

              2、計算兩個字符串的是否相似(字符的種類,和出現次數相同)

              3、定義二叉樹,節點值為int,計算二叉樹中的值在[a,b]區間的節點的個數。

              任意一種方式遍歷二叉樹,如果值在 [a,b] 之間,計數器+1

              4、一條路有k可坑,每次能跳平方數步長(1 4 9 16。。),不能跳到坑里,從a跳到b最少幾步?(動態規劃題)

              動態轉移方程

              f(n) = min( f(大于n的第一個平方數 -n) ,f(n- 小于n的第一個完全平方數) +1 )

              【 補充 ing

              在一個坐標軸上, 給定兩個點,一個起點,一個終點,起點有一個方塊,方塊可以左右移動,但是移動的長度只能是平方數長(1,4,9,16 ••••) ,同時坐標軸上還有洞,移動的過程中不能越過這個洞,不然會掉下去,問 由起點到終點 至少需要多少次移動,不能到達返回-1】

              5、給一個整數數組,求數組中重復出現次數大于數組總個數一半的數。

              int MoreThanHalfNum(int *a , int n )

              {

              int i , k , num = a[0];

              int times = 1;

              for(i = 1 ; i < n ; ++i)

              {

              if(times == 0)

              {

              num = a[i];

              times = 1;

              }

              else if(a[i] != num)

              --times;

              else

              ++times;

              }

              k = 0;

              for(i = 0 ; i < n ; ++i)

              {

              if(a[i] == num)

              ++k;

              }

              if(k*2 <= n)

              return -1; //沒有找到

              else

              return num; //找到

              }

              6、一個128bits 的二進制流,要求找出 里面包含 某8bits 二進制流的數目。

              如果只是一個128bit的流,那就用int對其某個字節,然后移位比較,然后int向后移動3個字節,繼續移位比較。如果是很多128bit的流,可以模仿kmp,用上面的方法,每次取int的8bit和目標8bit進行AND操作,結果只有256種可能,事先存一個256的表,查表決定向后跳躍的bit數。

              7、交換整型的奇數位和偶數位

              問題定義:

              Write a program to swap odd and even bits in an integer with as few instructions as possible(e.g, bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc)

              int SwapOddEvenBit(int x)

              {

              return ( ((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));

              }

              int main(void)

              {

              int a = 171;

              printf("%d\n", SwapOddEvenBit(a));

              return 0;

              }

              8、試著用最小的比較次數去尋找數組中的最大值和最小值。

              解法一:

              掃描一次數組找出最大值;再掃描一次數組找出最小值。

              比較次數2N-2

              解法二:

              將數組中相鄰的兩個數分在一組, 每次比較兩個相鄰的數,將較大值交換至這兩個數的左邊,較小值放于右邊。

              對大者組掃描一次找出最大值,對小者組掃描一次找出最小值。

              比較1.5N-2次,但需要改變數組結構

              解法三:

              每次比較相鄰兩個數,較大者與MAX比較,較小者與MIN比較,找出最大值和最小值。

              方法如下:先將一對元素互相進行比較,然后把最小值跟當前最小值進行比較,把最大值跟當前最大值進行比較。因此每兩個元素需要3次比較。如果n為奇數,那么比較的次數是3*(n/2)次比較。如果n為偶數,那么比較的次數是3n/2-2次比較。因此,不管是n是奇數還是偶數,比較的次數至多是3*(n/2),具體的代碼如下:

              void GetMaxAndMin(int *arr , int n , int &max , int &min)

              {

              int i = 0 ;

              if(n & 1) // 奇數

              {

              max = min = arr[i++];

              }

              else

              {

              if(arr[0] > arr[1])

              {

              max = arr[0];

              min = arr[1];

              }

              else

              {

              max = arr[1];

              min = arr[0];

              }

              i += 2;

              }

              for( ; i < n ; i += 2)

              {

              if(arr[i] > arr[i+1])

              {

              if(arr[i] > max)

              max = arr[i];

              if(arr[i+1] < min)

              min = arr[i+1];

              }

              else

              {

              if(arr[i+1] > max)

              max = arr[i+1];

              if(arr[i] < min)

              min = arr[i];

              }

              }

              }