生活随笔
收集整理的這篇文章主要介紹了
面试题(程序02)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給定一個數組,將數組中元素向右移動k個位置,k是非負數。例如:[1,2,3,4,5,6] 和 k=2 。輸出:[5,6,1,2,3,4]要求使用空間復雜度O(1)的原地算法。 // ***旋轉數組*** rorate=>旋轉
$arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19];
function rorate(array $arr ,$k )
{ $len = count ($arr ); if ($k >=$len ){ // $k%$len,那就只需要移動余數次即可 $k = $k % $len ;} $tmp = array_slice ($arr ,-$k ); // print_r($arr);// print_r($tmp);//還要把截取的那一段刪除 for ($i =$len -$k ;$i <$len ;$i ++){ unset ($arr [$i ]);} // 再把截取的數字插入到數組開頭// array_unshift($arr,$tmp);//這樣是吧數組插入開頭了 for ($j =$k -1;$j >=0;--$j ){ array_unshift ($arr ,$tmp [$j ]);} // 兩個for循環可以放到一起 print_r ($arr );}
rorate( $arr ,4); // 把兩個for循環放在一起
for ($i =$k -1;$i >=0;$i --){ array_pop ($arr ); array_unshift ($arr , $tmp [$i ]);
} View Code ?
模仿百度搜索框: 1 html代碼:
2 <!DOCTYPE html>
3 <html>
4 <head>
5 <meta charset="utf-8">
6 <title>百度搜索</title>
7 <script src="https://cdn.bootcss.com/jquery/1.9.1/jquery.min.js"></script>
8 </head>
9 <body>
10 <form action="" method="" enctype="multipart/form-data">
11 <input type="text" name="search" placeholder="輸入...">
12 <input type="submit" value="搜索"><br/>
13 <div class ="list">
14 <ul>
15
16 </ul>
17 </div>
18 </form>
19 </body>
20 <script type="text/javascript">
21 var search = $('input[name="search"]');
22 var list = $('.list>ul');
23 search.keyup(function (){
24 var cont = search.val();
25 $.ajax({
26 type: 'post',
27 data: {cont: cont},
28 dataType: 'json',
29 url: './test.php',
30 success: function (res) {
31 if (res.status){
32 list .find('li').remove();
33 $.each (res.result, function (index, item){
34 list .append('<li>'+item+'</li>');
35 })
36 }else {
37 list .html('<li>'+res.result+'</li>');
38 }
39 },
40 error: function (res) {
41 console.log (res);
42 },
43 })
44 })
45 </script>
46 </html>
47
48 PHP代碼:
49 $arr = ['里', '那里昂多', '里昂', '里那多', '外面', '外太空', '挖行人'];
50 if ($_POST ['cont'] == ''){
51 $data = ['status'=>0, 'result'=>'data is empty'];
52 echo json_encode($data );
53 }else {
54 $pattern = "/".$_POST ['cont']."+/";
55 $r = preg_grep ($pattern , $arr );
56 if ($r ){
57 $res = $r ;
58 }else {
59 $res = array ('暫無數據');
60 }
61 $data = ['status'=>1, 'result'=>$res ];
62 echo json_encode($data );
63 } View Code ?
//不知道空間復雜度為1 是什么情況。但是如果說不考慮空間復雜度的話,我想到的方法是:1.從數組末尾截取k個數字,然后插入到開頭。 // 2.for循環k次,從末尾彈出一個數字放在開頭
/*如下數組是學生成績,用PHP處理使其按照score倒序排序*/ $arr = array( array('name'=>'A','score'=>60), array('name'=>'B','score'=>90), array('name'=>'C','score'=>85), ); 思路:現將這個二維數組進行遍歷,把score單獨存到一個新的數組score中,下標和原來的一一對應。然后使用arsort()對score數組排序(保留健名),然后主要就是利用這個健名的順序對原二維數組進行排序,使用array_keys()獲取排序后的健名存到keys數組中。對keys數組遍歷,keys數組中的值就是二維數組按需求排序后的下標。所以把原來數組中的值按照鍵名的順序依次取出來重新插入數組中即可。(二維數組中即便有其他的值也沒問題)
// 遍歷此數組,key和val一一對應,比較val['score']大小同時,記住對應的key值。最后按照val['score']排序的時候,就用key找對應的name。
function score_sort(array $arr ) { // 默認是二維數組 if (count ($arr )<=1){ return ;} // 定義一個數組用來存放val['score']的值 $score = []; foreach ($arr as $key => $val ){ $score [$key ] = $val ['score']; // 成績對應的下標就是原數組對應的下標//然后我的想法就是對score數組進行排序,并且是保留健名的排序。這樣就還可以找到score中值在原數組中位置,不會找不到而出錯
} arsort ($score ); // 保留健名的倒序排序 print_r ($score ); // 然后獲取score數組的健名(*順序不能變*),將原來的數組按照這個健名排序即可。 $keys = array_keys ($score ); print_r ($keys ); echo '<br><pre>'; // 這里我想到的方法是最笨的方法,沒有想到更好的處理方式-_-#//就是把原來數組中的值按照鍵名的順序依次取出來重新插入數組中 $newarr = []; for ($i =0;$i <count ($keys );++$i ){ $index = $keys [$i ]; $newarr [] = $arr [$index ];} return $newarr ;
} print_r (score_sort($arr )); View Code ?
$arr = array( array('name'=>'A','score'=>60,'ddd'=>66), array('name'=>'B','score'=>90,'ccc'=>77), array('name'=>'C','score'=>85,'eee'=>88), array('name'=>'C','score'=>84,'eee'=>88), array('name'=>'C','score'=>58,'eee'=>88), );
有一段文字:"我司有電信AD、AC(已取消)、2018央采AF、WOC等車產品" ,取出這段描述中的英文AD,AC,AF,WOC /* "我司有電信AD、AC(已取消)、2018央采AF、WOC等車產品" 取出這段描述中的英文AD,AC,AF,WOC */
$str = "我司有電信AD、AC(已取消)、2018央采AF、WOC等車產品";
$pattern = "/[a-zA-Z]+/";
// $pattern = "/[a-zA-Z]*/";
$arr = preg_match_all ($pattern ,$str ,$match );
print_r ($match [0]); // 這里有一點要注意,正則表達式要用 + ,千萬不要用 * 。因為*匹配0,1,多次,導致返回結果會有很多空值。使用+就是至少有一個英文才會匹配。 View Code ?
一串數字,1,3,6,10,15,21,28,36,45······請用遞歸計算第三十個數字是多少 // addend=>加數,counter=>計數器
function number ($num =1,$addend =2) { static $counter = 1;// counter記錄當前$num是第幾個數字 $num += $addend ; $addend ++;// 加數遞增 $counter ++;// 每計算一次,計數器加1 當counter == 30的時候結束 if ($counter < 30){ $num = number ($num ,$addend );// 要用一個變量來接收函數返回值才行,而且這里必須用num接收。//因為最后一次計算,不會執行if分支,直接返回計算結果num,num返回到函數調用處。如果不用變量接收函數返回值,那么num最終返回的就是第一次計算的結果。為什么選擇用num接收,因為要用最后一次函數返回值覆蓋之前每一次計算的num值,這樣得到的結果才是正確的。不然的話返回的將是第一次計算的結果num=3。
} return $num ;
} echo number (); View Code ?想要得到第幾個數字都可以,直接調用的時候傳一個參數即可。如下:
// addend=>加數,counter=>計數器
function number ($k ,$num =1,$addend =2) { static $counter = 1;// counter記錄當前$num是第幾個數字 $num += $addend ; $addend ++;// 加數遞增 $counter ++;// 每計算一次,計數器加1 當counter == 30的時候結束 if ($counter < $k ){ $num = number ($k ,$num ,$addend );// 要用一個變量來接收函數返回值才行,而且這里必須用num接收。//因為最后一次計算,不會執行if分支,直接返回計算結果num,num返回到函數調用處。如果不用變量接收函數返回值,那么num最終返回的就是第一次計算的結果。為什么選擇用num接收,因為要用最后一次函數返回值覆蓋之前每一次計算的num值,這樣得到的結果才是正確的。不然的話返回的將是第一次計算的結果num=3。
} return $num ;
} echo number (30); View Code ?
sql 類型題(wamp下student數據庫): select a.grade,b.name,a.name,c.score,max (score) as maxscore from a,b,c where a.id= c.stu_id and b.id= c.subject_id group by a.grade,b.name ; 第一題答案,但是名字還沒有對應,查詢出來的名字不是最高分對應的學生名。用到了三表聯查 。。還有就是group by后面可以接多個字段 ,第一次使用。而且group by 后面字段之間使用逗號 和使用and是不一樣的。使用逗號是(怎么說呢,就拿本題來說吧)按年級和科目分組,一年級,二年級·····然后一年級里還有語文、數學········結果如下圖
?第二題:要按照stu_id分組,不能按照學生姓名分組,因為學生姓名會有重復的,要統計所有學生的分數,并且不可以去重。
select a.grade,a.class,a.name,max (score) as maxscore,min (score) as minscore,avg (score) as avgscore from a,c where a.id= c.stu_id group by c.stu_id; 第三題:按年級分組,每個年級中排名第一的班級(所有學生的所有科目平均分排名第一)
select a.grade,a.class,avg (score) from a,c where a.id= c.stu_id group by a.grade,a.class; 先計算出每個年級中的每個班級平均分(如上SQL),在從結果中篩選出平均分最大的那個班級。
select grade,class,max (avgscore) as maxscore2 from (select a.grade,a.class,avg (score) as avgscore from a,c where a.id= c.stu_id group by a.grade,a.class) as s group by grade ; 這里用到了嵌套查詢 (效率低,不得已而用,沒想到其他方法),還有注意一點,就是from后面的子句要起別名 ,否則會報錯:Every derived table must have its own alias 。意思是:每個派生表都必須有自己的別名。這里起了一個別名s。
轉載于:https://www.cnblogs.com/bneglect/p/10986845.html
總結
以上是生活随笔 為你收集整理的面试题(程序02) 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。