数据结构题目
1. 第K個置換序列
set[1,2,3,…,n]?contains a total of n! unique permutations.?By listing and labeling all of the permutations in order, We get the following sequence (ie, forn= 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence
先求第一位上的數字:固定第一位上的數字,后面可能的情況是 (n-1)!,則第一位上的數字為 k/(n-1)!
同理第二位上的數組 k%(n-1)!/ (n-2)!
依次往下
2.?貪心,動態規劃,搜索:
每個階段只有一個狀態->遞推;
每個階段的最優狀態都是由上一個階段的最優狀態得到的->貪心;
每個階段的最優狀態是由之前所有階段的狀態的組合得到的->搜索;
每個階段的最優狀態可以從之前某個階段的某個或某些狀態直接得到而不管之前這個狀態是如何得到的->動態規劃
3. 最大子數組問題:這里用分治法
把數組等分成Aleft,Aright兩部分,那么最大子數組有三種可能情況,在Aleft/Aright中,或者跨越這個兩個子數組,前兩者可以遞歸求解,跨越兩個子數組如何求解呢?從分割點,往前遍歷,求得left最大值(以mid結尾),同理可以求得right的最大值。兩者相加即跨越兩個子數組的最大值。時間復雜度是O(nlogn)
一種O(n)復雜度的解法是:假設已求得 i 之前的最大子數組和max_so_far,下一步則是要求 i + 1以前的所有最大子數組,此時最大的子數組為max(max_so_far,max_ending_i+1),此時轉化成求解max_ending_i+1的問題,max_ending_i+1 = max(max_so_far + a[i+1], a[i+1])
4.?有這樣一種編碼:如,N=134,M=f(N)=143,N=020,M=fun(N)=101,其中N和M的位數一樣,N,M可以均可以以0開頭,N,M的各位數之和要相等,即1+3+4=1+4+3,且M是大于N中最小的一個,現在求這樣的序列S,N為一個定值,其中S(0)=N,S(1)=fun(N),S(2)=fun(S(1))。
》首先將數字轉化為字符串,字符串的開始是數字高位,字符串的末尾是數字低位。 》從字符串末尾往前掃描,找出第一個大于0的數字,減1 》繼續往前找,找到第一個小于9的數字,加1 》將該位之后到末尾的字符重新排序(不包括該位),即可得所求結果 5.?靜態方法里面為什么不能聲明靜態變量?靜態變量屬于他所在的類,而靜態方法中的靜態變量的作用域只在這個靜態方法內,所以不能聲明靜態變量。
6. 如果讓你設計一個類,什么時候把變量聲明為靜態類型?
當類的所有對象都和一個變量相關時,聲明為靜態變量。
7. 抽象類和接口的具體區別是什么?
抽象類可以有方法的實現,接口沒有方法的實現。抽象類一般是本質的東西,比如人,而接口一般是附加的東西,比如會飛,flyable,跑,runnable. 抽象類可以沒有抽象方法,而接口只能有抽象方法,抽象類有構造方法而接口沒有構造方法。java只能單繼承,不過可以同時實現多個接口。
8、給定n個實數 ?,求著n個實數在實軸上向量2個數之間的最大差值,要求線性的時間算法。?
將這n個實數排序,求相鄰元素的最大值,但是時間復雜度是O(nlgn),不滿足線性的要求。通過分桶方法完成近似排序。
step1:遍歷n個數找到max和min
step2:對剩余的n-2個數,映射到n-1長度為(max-min)/n-1個小桶內,將這個n-2個數分到這n-1個桶內,并求每個桶的max和min。并且注意到這n-1個桶至少有一個桶是空的,那么最大差值一定不再桶內出現,而在相鄰桶之間出現。
step3:遍歷min1,max1,min2,max2....,O(n)時間找出相鄰元素的最大差值。
9.?輸入文件的第一行是一個正整數T, 代表測試數據的數量.?接下來T行, 每行為一個測試數據, 有兩個數字, 第一個數字為一個十進制小數d, 為面試官出的題目里的數字, 0<=d<=10000, 且小數點后的數位都是4位; 第二個數字是一個非負整數k(1<=k<=100), 代表要給出的答案小數點后需要輸出k位.
輸出描述:對于輸入文件里的每個測試數據, 輸出相應的答案, 答案的格式為n(10)=m(2), 具體可參照樣例輸出.
樣例輸入
3
7.7000 3
0.5000 5
3.1416 2
樣例輸出:
7.7000(10)=111.101(2)
0.5000(10)=0.10000(2)
3.1416(10)=11.00(2)
整數部分轉換2進制,從右往左,除二取余;小數部分從左往右,乘二取整。
?
轉載于:https://www.cnblogs.com/lbingkuai/p/4551334.html
總結
- 上一篇: TCP/UDP编程中的问题汇总
- 下一篇: XTUOJ 1206 Dormitory