php 面试问题收集--算法篇

特伦姝 · · 1225 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

算法题:

问:实现整数转二进制字符串函数 ToBinString ,例如,输入 3 输出 "11",输入 11 输出 "1011"。
php版:

//php实现进制转换
function dec2bin($num)
{
    if ($num == 0) return 0;

    $flag = array();
    while ($num != 0) {
        array_push($flag, $num % 2);
        $num = (int)($num / 2);
    }
    $result = '';
    while (!empty($flag)) {
        $result .= array_pop($flag);
    }
    return $result;
}

echo dec2bin($n);

问:实现返回一个由英文字符组成的字符串含最大不重复字符子串长度,并添加测试用例。

php版:

<?php

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
  请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

 
class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function lengthOfLongestSubstring($s) {

        $l = strlen($s); //获取字符串总长度
        $len = 0;   //记录长度
        $find = ''; //保存截取字符串

        for($i=0;$i<$l;$i++){
            $res = strpos($find,$s[$i]); // 查找$find中是否存在

            if($res !== false){

                $find.=$s[$i];

                $find = substr($find,$res+1);

            }else{
                $find.=$s[$i];
            }

            $len = strlen($find) > $len ? strlen($find) : $len;
        }
        return $len;
    }
}

golang版:

//寻找最长不含有重复字符的子串,里面的rune直接把中文转为一个字节,中英文一起操作
func lengthOf(s string) int{
    lastOcc:=make(map[rune]int)
    srart :=0
    maxLength:=0
    for i ,ch :=range []rune(s){
        if lastI,ok:=lastOcc[ch];ok&& lastI>=srart{
            srart=lastI+1
        }
        if i-srart+1 >maxLength{
            maxLength=i-srart+1
        }
        lastOcc[ch]=i
    }
    return maxLength
}

个性推荐

对社区APP,根据用户与文章的互动偏好和热度进行个性推荐,进行系统设计
问题描述:
场景:
社区文章100w+,问题30w+,每日活跃用户数8w+,首页的内容版块刷新获得高热度的个性偏好内容推荐
条件:
文章热度的相关系数:推荐曝光(+1)、浏览(+2)、页面停留时长 > 5s(+3)、点赞(+5)、关注(+8)、分享(+12)、评论(+15)(作者与自己文章的互动不计热度)
热度值的计算:系数触发的次数*系数分值
例如一篇文章的的数据显示为:
2000次推荐曝光,100次浏览,30个停留5s以上,10个点赞,2个关注,1个分享,4条评论
则,该文章的热度为:
20001+1002+303+105+28+112+4*15=
2000+200+90+50+16+12+60=

2428。

要求:
搜索请求峰值要求性能:8k RPS(请求/秒),刷最新推荐的文章和问题,请求峰值要求性能:8K RPS;
请对此功能进行系统设计


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:特伦姝

查看原文:php 面试问题收集--算法篇

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1225 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传