騰訊2017暑期實習生筆試題(有趣數字)
之前準備把騰訊實習生招聘的第三道題做出來的,但是時間很緊,最終拖到今天才完成的,下午做了一個小時才弄出來的,主要是細節方面的問題。
這個題意思很簡單吧,給出很多數,找出“二元組”裡面差最小的和差最大的個數(兩個數的差事大的減去小的,也就是絕對值的意思)。說實話,這個題的處理確實很難把握。
我的解題思路是:先將這個陣列排序,然後就很容易計算出差最大的二元組的個數,接下來就是計算最小二元組的個數。
- 最大二元組的計算是分別計算出最大值和最小值(可能存在重複,需要把握住),假設最小值的個數為n,最大值的個數為m,那麼差最大的二元組的個數即為:n*m,若是不明白
- 最小二元組的計算則相對複雜一些,但是排序以後,最小差距的計算就是計算相鄰兩個數的差。其中需要把握的東西就是計算過程中”差距“由一個值變為另一個值的時候需要好好把握,這個時候很容易出錯。我按照我寫的程式碼來講述,大家可以根據我所說的自己再設計程式碼,主要是一些細節的變化。還需要注意的一點就是,最小差並不一定是連續的,可能會間隔一些,我給個例子,大家對照著看看吧。
我寫的程式碼會剛開始的時候跳過對開始部分的兩個4的統計,最小值跟給出的值總是想差一點點,最後發現問題是出在兩次最小差改變的時候,下面給出程式碼,供參考一下。
#include <iostream> #include <vector> #include <algorithm> using namespace std; void Solution(vector<int>& V){ int sz = V.size(); int min = 0; int minNum = 0;//最小二元組數目 int maxNum = 0;//最大二元組數目 if (sz == 0){ cout << 0 << " " << 0 << endl; //差最小,差最大 return; } else if (sz == 1){ cout << 1 << " " << 1 << endl; } else{ sort(V.begin(), V.end()); //排序 int i = 0; int j = sz - 1; while (V[i] == V[i + 1] && i < sz - 1){ ++i; } while (V[j] == V[j - 1] && j > 0){ --j; } maxNum = (i + 1)*(sz - j); //差最大的數 min = V[sz - 1] - V[0] + 1; int flag = 0; for (int k = 0; k < sz - 1; ++k) { if (V[k + 1] - V[k] < min){ min = V[k + 1] - V[k]; minNum = 1; flag = 1; //主要用於記錄差距第一次變為0 if (min == 0) { --k; //這樣做的目的是為了不錯過min=0的,第一次統計的時候會少統計一個 } } else if (V[k + 1] - V[k] == min){ int sum = 0; while (k< sz -1 && V[k + 1] - V[k] == min) { ++k; ++sum; } if (min == 0){ //差距為0 if (flag == 1){ minNum = (sum)*(sum + 1) / 2; //差距一次變為0的時候需要好好注意 flag = 0; } else{ minNum += sum*(sum + 1) / 2;//根據相同元素個數計算二元組個數 } } else{ //差距不為0 minNum += sum; --k; //k會加兩次(for迴圈也會加一次,所以需要調整一下) } } } } cout << minNum << " " << maxNum << endl; } int main() { int n; int tmp; while (cin >> n){ vector<int> arr; for (int i = 0; i< n; ++i){ cin >> tmp; arr.push_back(tmp); } Solution(arr); } return 0; }
相關推薦
騰訊2017暑期實習生筆試題(有趣數字)
之前準備把騰訊實習生招聘的第三道題做出來的,但是時間很緊,最終拖到今天才完成的,下午做了一個小時才弄出來的,主要是細節方面的問題。 這個題意思很簡單吧,給出很多數,找出“二元組”裡面差最小的
騰訊2017暑期實習生筆試題解題答案彙總
構造迴文 題目 給定一個字串s,你可以從中刪除一些字元,使得剩下的串是一個迴文串。如何刪除才能使得迴文串最長呢? 輸出需要刪除的字元個數 輸入描述: 輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=1000.
騰訊2017暑期實習生程式設計題-有趣的數字
傳送門 code #include<vector> #include<cstdio> #include<algorithm> #include<map>
騰訊2016年實習生筆試題-蛇形數組-循環枚舉遍歷
com alt 實習 png 枚舉 分享 .cn 循環 實習生 在n*n方陣裏填入1,2···,n*n,要求天成蛇形,如n=4時。 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5
騰訊2017暑期實習生編程題 第二題 字符移位
append () pen bic end OS gpo remove 描述 小Q最近遇到了一個難題:把一個字符串的大寫字母放到字符串的後面,各個字符的相對位置不變,且不能申請額外的空間。 你能幫幫小Q嗎? 輸入描述: 輸入數據有多組,每組包含一個字符串s,且保證:
騰訊2017暑假實習筆試題-字串編碼
/* 騰訊2017暑假實習筆試題-字串編碼 輸入:16的倍數的字串 輸出:編碼後的結果 例子 輸入:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl 輸出: 00000010 61 62 63 64 65
動態規劃——構造迴文——騰訊2017暑期實習生程式設計題
題目:給定一個字串s,你可以從中刪除一些字元,使得剩下的串是一個迴文串。如何刪除才能使得迴文串最長呢? 輸出需要刪除的字元個數。 輸入描述:輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=1000。 輸出描述:對於每組資料,輸出一個整數,
騰訊2017暑期實習生程式設計題 題解
1.構造迴文 給定一個字串s,你可以從中刪除一些字元,使得剩下的串是一個迴文串。如何刪除才能使得迴文串最長呢? 輸出需要刪除的字元個數。 解題思路分析:題意是說問我們最少刪幾個字元能夠使得這個字元變成一個迴文串,這裡需要用到迴文串的性質,因為迴文串是前後對稱的,所以我
騰訊2017秋招筆試題難點記錄
1.在vs編譯環境下,以下程式碼的執行情況: 1234567int f(int a, int b, int c){return 0;}int main(){return f(printf("a"),printf("b"),printf("c"));}解析: 該題考
騰訊2017暑期實習生程式設計題
小Q最近遇到了一個難題:把一個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。你能幫幫小Q嗎? 輸入描述: 輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=1000. 輸出描述: 對於每組資料,輸
2017騰訊校招暑期實習生筆試題1
構造迴文給定一個字串s,你可以從中刪除一些字元,使得剩下的串是一個迴文串。如何刪除才能使得迴文串最長呢? 輸出需要刪除的字元個數。輸入描述:輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=1000. 輸出描述:對於每組資料,輸出一個整數,
[2017騰訊校招線上筆試題]
import java.util.ArrayList; import java.util.Scanner; public class Main { public static ArrayList<Integer> rst = new ArrayL
筆經-騰訊2018暑期實習生-資料分析崗筆試經歷
發現今年雖然很多公司有了資料分析崗位面向本科生開放,但幾乎資料分析師的實習筆試幾乎都沒有考程式設計,注意是幾乎都沒有考!這也給了我們一些啟發,也說明現在的資料分析崗位職能方向更細化。 不定項選擇(每題4分共25題) 1.同事小鵝在訓練深度學習模型是發現訓
騰訊2017暑期實習筆試(LCS & 暴力 & 計數)
一共三道題,感覺第一題要想想,剩下兩道比較簡單,直接做就行了 Q1: 解題思路:對字串進行翻轉後,求一下最長公共子序列就是最長的迴文串,用總長度減去最長迴文串的長度即為要刪去的字元數 程式碼如下:
騰訊2018秋招筆試題之小Q的歌單
題目描述: 小Q有X首長度為A的不同的歌和Y首長度為B的不同的歌,現在小Q想用這些歌組成一個總長度正好為K的歌單,每首歌最多隻能在歌單中出現一次,在不考慮歌單內歌曲的先後順序的情況下,請問有多少種組
2017京東實習生筆試題(一)
下面程式的返回值是什麼? #include "stdafx.h" #include<iostream> using namespace std; int func(int x) {
騰訊2018暑期實習生招聘感受,崗位是後臺開發TEG事業群。
寫在前面:以前看過一個說法,你在面試大概進行到一半的時候基本就確定自己是否通過了,這裡我用實際例子給出反正,面試完還是收心等結果為好。我的面試官人特別好,是校友,還是本家。面試時間是2018年的4月15號下午上來第一步自我介紹,然後介紹簡歷裡面的專案,簡歷裡面寫了兩個專案,第
騰訊2017年實習生春招面試記錄
面試官什麼也不問就問兩個問題,手動微笑 1、 假設a=99,b=99,用程式碼滿足以下基礎邏輯: a + b = c c - a = b a、b、c 三個數,三個數值範圍均在:0<n&
騰訊2016校招筆試題(含答案)
騰訊2016校招筆試題(含答案) 1、父母生了兩個小孩。第一個是男孩,兩個都是男孩的概率是多少? 答案:1/2 解釋:第一個已經為男孩,第二個只有兩種可能男孩或女孩 概率=1乘二分之一 2、設k1,
騰訊2017暑假實習生招聘筆試程式設計題(1)
演算法基礎-字元移位 小Q最近遇到了一個難題:把一個字串的大寫字母放到字串的後面,各個字元的相對位置不變,且不能申請額外的空間。 你能幫幫小Q嗎? 輸入描述: 輸入資料有多組,每組包含一個字串s,且保證:1<=s.length<=10