日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

整理的几个面试题目

發布時間:2025/3/21 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 整理的几个面试题目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

整理了幾個面試題, 可能會用到;? 有幾個難度應該算是比較大;

對于沒工作經驗、沒實際經驗的本科、研究生,不容易想清楚, 更不容易寫好。



一堆球中有1個球較輕;求y次天平比較,才能找出 這堆球[總數x]中較輕的那個球。? 求y與x的關系。

x = 3^^y
3個球, 1次比較就能知道; 兩端各1個, 平衡則第三個較輕; 不平衡則上浮的那端較輕;
9個球, 2次比較就能知道; 分為個數相同的3堆; 兩端各放1堆;平衡則在剩余1堆中, 否則在較輕那堆中; 繼續。。
=========據說來源于百度面試, 等號不確切, 應該是一個不等式? 3^^(y-1) < x <= 3^^y





整理字符串。 一句英文字符串可能包含多個空格、換行。 要求按如下方式整理:
1)當連續多個空格換行時, 保留1個換行;
2)連續多個空格保留1個空格;
3)末尾的空格或者換行都去掉。
如"aBBNBcNBNcBBdNBN" ===> "aNcNcBd"? N表示換行; B表示空格。
==========某年網易的面試題,寫的一團糟





按層遍歷2叉樹。【隊列; 將當前節點的兒子們入隊】
===========維護隊列即可





兩個有序數組,長度分別為m,n; 找出歸并后的中位數?!静粶试S做實際歸并操作;中位數指中間位置的數】
思路:分別找出兩個有序數組的中位數, 比較大小關系, 兩個中位數將兩數組劃分為4段; 最終尋找的目的數只可能出現在某2段中; 在那2段中繼續尋找目的數即可。
空間復雜度O(1), 時間復雜度O(log(m+n)),因為每次減少1半的數據量。
============某年微軟筆試題





//文件區段、分時段數據的處理; log中ip地域處理。
1) 一個無序的range的序列,如[1,3], [8,10],[9,19], [2,6], [15,18] 寫程序合并有重疊的range、并調整為有序。
2) 歸并:(range1有序且不重疊、 range2有序且不重疊); 歸并結果要求有序且合并重疊的部分。
3) 查詢某個數值,是否被range序列的某個range包含? 如果這種查詢非常多, 該range序列如何組織能優化查找性能
============來源于實際應用中




打印出正整數的所有拆分方式。 如
4可拆分成3+1; 2+2; 2+1+1; 1+1+1+1;
============排列組合生成




將有序的數組建成一個有序二叉樹、同時二叉樹盡量平衡。
數組中間節點作為根節點, 左半段作為左子樹、右半段作為右子樹。
Node *build(int a[], int n)//n為a中元素個數。
{
???? if(n == 0) return NULL;
???? if(n == 1) return new Node(a[0]);
???? Node *root = new Node(a[(n-1)/2]);
???? root->left = build(a, (n-1)/2);
???? root->right = build(a + (n-1)/2 + 1, n - (n-1)/2 - 1);
?? ?
???? return root;
}
=============較普通,主要是希望平衡。






長為2*n的矩形平面; 用規格為1*2的長方形地磚; 有多少種方法鋪滿。
思路: 第一塊轉豎著放在最左側,就是f(n-1);? 或者兩塊磚橫疊在最左側,就是f(n-2); 因此就是 f(n) = f(n-1)+f(n-2);
==============遞歸========





任意給定n個正整數,求這n個正整數拼在一起能組成的最小數。
如 1, 34, 12, 43 結果為===>1123443

思路:
1) 按各數的高位由小到大排列
---高位相同,定義a < b, 如果 ab < ba 成立。
2)? 直接一次性串在一起
如 1 14 17 172 22 353, 排序后不變? 結果為 1141717222353
如 1 14 17 170 22 353, 排序后為 1 14 170 17 22 353? 結果為 1141701722353
如 1 14 17 171 22 353?? 此時17 和? 171的位置可互換、不影響。
如 1 14 17 17112, 排序后為1 14 17112 17 ==>1 14 1711217==>114 1711217==>1141711217
如 17 171 17112 172 排序后為17112 17 171 172 ==》1711217171172
如 17 171 1711 17112 172 排序后為1711 17112 17 171 172==>.....

證明。。?

===============據說題目出自baidu, 思路是我的, 其中細節需要證明, 應該可以證明

1)可排序

2)能串






將單鏈表就地反轉。
struct Node {int v; struct Node *next};
struct Node *reverse(struct Node *head)
{
???? if(!head) return NULL;
???? struct Node *cur = head->next;
???? head->next = NULL;

???? while(cur)
???? {
????????? //將cur放到head前面
????????? struct Node *tmp = cur->next;
????????? cur->next = head;
????????? head = cur;

????????? //繼續處理下一個節點
????????? cur = tmp;
???? }

???? return head;
}
=================老題來源于網絡=================
??? ?



實現一個棧, 其pop, push, 當前棧中最小值min 都是O(1)時間。
class Stack
{
vector<int> data;
vector<int> minv;
void push(int v)
{
??? if(data.size() == 0)
??? {
??????? data.push_back(v); minv.push_back(v);
??? }
??? else
??? {
??????? data.push_back(v);
??????? if(v < minv[minv.size()-1])
?????????????? minv.push_back(v);
??????? else
?????????????? minv.push_back(minv[minv.size()-1]);
???? }
}

int pop()
{
??? if(data.size() > 0)
??? {
??????? minv.pop();
??????? int v = data[data.size()-1];
??????? data.pop();
??????? return v;
???? }
}

int min()
{
???? if(data.size() > 0)
??????? return minv[minv.size()-1];
}
};
============老題====================

總結

以上是生活随笔為你收集整理的整理的几个面试题目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。