当前位置: 首页 > 面试经验 >

奇安信前端笔试5.14(22-23年收录)

优质
小牛编辑
87浏览
2023-05-14

奇安信前端笔试5.14(22-23年收录)

C++和前端同算法题

js node(核心代码模式),日期相近的可能会有原题,奇安信流程可能会较长(参考秋招时好几个月)

算法(2道)涉及DFS,剪枝,dp动归,双指针加贪心(好爱考选择类+棋盘类啊- -)

2022-05-14

单选(20题*2分)多选(10题*2分)算法(2*20

  1. T(n)
  2. 闭包输出
  3. 数据结构中串的定义
  4. 二分查找最坏情况下的搜索次数
  5. std::list
  6. DNS资源记录
  7. DOCTYPE
  8. CreateFile
  9. html全局属性
  10. 显式代理有哪些

算法

一个画布大小为100*100。画布本来是白色的。小明在上面画框,框里的小方格,如果是白色的就会变成黑色,如果是黑色的,就会变成白色。问题:小明画了很多次框后,画布上白色的小方格有多少个。

输入:【[0 0 1 1],[4 4 2 2]】

输出:9995

说明:白色面积为100*100-1-4 = 9995.

ac:

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 得到画布上白色小方格的个数
 * @param rects int整型二维数组 
 * @return int整型
 */
const map=Array.from(new Array(100),()=>new Array(100).fill(true));
function paint(arr) {
    // write code here
    const x0=Math.min(arr[0],arr[2]);
    const x1=Math.max(arr[0],arr[2]);
    const y0=Math.min(arr[1],arr[3]);
    const y1=Math.max(arr[1],arr[3]);
    for(let i=x0;i<x1;i++){
        for(let j=y0;j<y1;j++){
            map[i][j]=(!map[i][j]);
        }
    }
}
function getWhiteCounts( rects ) {
    // write code here
    for(const rec of rects){
        paint(rec)
    }
    let res=0;
    for(let i=0;i<100;i++){
        for(let j=0;j<100;j++){
            if(map[i][j]){
                res++;
            }
        }
    }
    return res;
}

某几位同学准备要5排一起打手机游戏,现在他们5个人一共有N台手机,但是各个手机剩余电量不等,假设每玩一分钟需要消耗电量1%,不玩手机不消耗电量,手机电量消耗光之后可以换剩余的有电的手机继续一起游戏,那么他们最多能保持多久的5人一起游戏时间?

输入:每台手机的剩余电量

[100 100 100 50 100 5 10]

输出:预期时间

[65]

ac:题解来自5.14奇安信C++笔试复盘

class Solution {
public:
    int maxTime(vector<int>& batteries) {
        sort(batteries.begin(), batteries.end(), greater<int>());
        int time = 0;
        int K = batteries.size();
        while(K >= 5) {
            for (int i = 0; i < 5; i++) {
                batteries[i] --;
                if (batteries[i] == 0) K--;
            }
            time++;
            sort(batteries.begin(), batteries.end(), greater<int>());
            
        }
        return time;
    }
};

2022-09-15

9.15 奇安信前端笔试

  1. 两个商场 都买0-N-1编号的商品,每个商场的价格不一样,优惠政策也不一样。A场:买三打6折,B场:买3免1,买3件 不用付最便宜那件衣服的价格输入:[1,8,2],[4,3,5] 输出:6 在A商场买[1,2] B商场买[3]// 有些用例不记得了... 感觉这题挺难的 没想出什么好的解法,只想到了笨方法
var lossLess = function (numsA,numsB) { 
 function sum(nums){
     return nums.reduce((a,b)=>a+b)
 }
 function Free1(nums){
     // b商场的优惠 直接封装函数好了
     nums.sort((a,b)=>a+b)
     return nums[1]+nums[2]
 }
 let cost =  0
 let len =numsA.length // 长度肯定相同的
 if(len<3){
     // 直接算总和最小额
     return Math.min(sum(numsA),sum(numsB))
 }
 //i>3
 let i=0
 while(i<len){ //0 1 2 3|4
     if(i+2<len){
         let nA = numsA.slice(i,i+3)
         let nB = numsB.slice(i,i+3)
         let lessCost = 0
         // 算前三个那个钱少
         for(let k=0;k<nA.length;k++){
             if(nA[k]<nB[k]){
                 lessCost+=nA[k]
             }else{
                 lessCost+=nB[k]
             }
         }
         cost += Math.min(Math.floor(sum(nA)*0.6),Free1(nB),lessCost)
         i+=2
     }else if(numsA[i]<numsB[i]){
         cost+=numsA[i]
     }else{
         cost+=numsB[i]
     }
     i++
 }
 return cost
}
  1. 在一个100*100的网格里,一只蚂蚁从原点开始走,交叉点上有食物,请问蚂蚁拿到全部食物最少需要多少步?输入:[[0,1],[0,2],[0,3]] 输出:3 从00走到01走到02走到03 每次加1思路:我用的回溯算法,先把食物距离原点近到远的顺序排列。再把每次的path存下来 最后把path的总和添加到res中,最后输出res中最小的值。这个只过了50%。
var getMinLen = function (maps) { 
    // write code here
    let res = []
    let path = []
    // 排序成距离原点位置近的在左
    maps.sort((a,b)=>((a[0]-0)+(a[1]-0))-((b[0]-0)+(b[1]-0)))
    function Tracer(left,right,startIndex){
        if(path.length==maps.length){
            // console.log(path)
            res.push(path.reduce((a,b)=>a+b))
        }
        for(let i=startIndex;i<maps.length;i++){
            let distance = Math.abs(maps[i][0]-left)+Math.abs(maps[i][1]-right)
            path.push(distance)
            Tracer(maps[i][0],maps[i][1],i+1)
            path.pop()
        }
    }
    Tracer(0,0,0)
    return Math.min(...res)
}

2022-08-25 

8月25日 奇安信前端工程师笔试

1.计算城市通路数目 DFS

判断从城市0到城市4有多少条路可以通

  0和4城市之间的网络拓扑是有向无环图,计算0到4有多少条路可以走

function DagPathNum(nodes) {
  // write code here
  let n = nodes.length;
  //建立n维矩阵存储图
  //Array [Array [false...false]...Array [false...false]],...代表n个
  let map = Array.from(new Array(n), () => new Array(n).fill(false));
  for (let i = 0; i < nodes.length; i++) {
    for (let j = 0; j < nodes[i].length; j++) {
      map[i][nodes[i][j]] = true;
    }
  }
  console.log(map);
  
  let count = 0;
  function fun(i) {
    console.log("i:", i);
    if (i == n - 1) count++;
    for (let j = 0; j < n; j++) {
      if (map[i][j]) {
        fun(j);
      }
    }
  }
  fun(0)
  return count;
}

2. 查找直角坐标系内的两个点使他们与x轴围成的长方形面积最大  (暴力)

 给定一个无符号整数数组,每个元素表示一个点,数组元素的索引作为直角坐标系的x坐标,元素作为y坐标,任意两个点:  x轴方向的距离作为长方形的长,y轴方向的最小值作为长方形的宽,找到两个点使长方形面积最大,输出面积。 例如 [4,1,2,7]代表4个点(0,4),(1,1),(2,2),(3,7),点(0,4),(1,1)表示的长方形: 长=(1-0),宽=min(4,1),面积=长*宽=1

function cfx(node) {
  node = node.replace("[", "").replace("]", "").split(",");
  let nums = [], max = 0;
  for (let i = 0; i < node.length; i++) {
    nums.push({
      x: i,
      y: parseInt(node[i])
    })
  }
  for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      let c = nums[j].x - nums[i].x;
      let w = getMin(nums[i].y, nums[j].y);
      max = Math.max(max, c * w)
    }
  }
  function getMin(a, b) {
    return a < b ? a : b;
  }
  return max
}

2022-03-18

奇安信2022前端春招笔试题

单选:

1.boxsizing的默认值

2.ospf相关知识

3.a标签伪类的排列方式

4.exa存储的值为0X123456,那么al存储器的值为?

5.已知前序遍历123456,那么中序遍历的结果?

6.设置tab键次序的属性是?

7.以下哪种是绝对单位?(em,px,vh,ch)

8.n个节点的完全二叉树的深度?

9.cors发送预检请求的条件?

10.tcp中的option最大长度是?

多选

1.进程的基础功能?

2, 二叉树的一道题

3.对于bgp说法正确的是?

算法:

1.有一批货物需要抽检,抽检从第一个或者第二个开始,依次从第i+1个,或者i+2个抽检,问抽检的最短时间?

2.有一个二叉树,现对其打乱几个节点,变成非二叉树,请你还原这棵二叉树

前端常考设计模式,进程线程,数据结构,经典算部分涵盖了大部分知识点,部分目录展示

2023年最全前端面试(20w字)HTML5+CSS3+JS+TS4+Vue3+React18+八股文+手写+项目+笔试 涵盖了大部分笔面知识点,部分目录展示

#奇安信##前端##笔试##面试##实习#
 类似资料: