牛客之程序员面试金典_ 编程题(二)

【牛客刷题】前端--JS篇(二) 🚀牛客网是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站,更是一个专注于程序员的学习和成长的平台。🪓自学是一个程序员必备的能力,而提高自己的编程能力最好方法就是通过刷题。一次偶然的机会让我发现牛客网这个新大陆,开启自己IT之旅。这里有个大厂的面试真题,知己知彼百战百胜。更有在线编程调试功能,提高编程效率。​求知无坦途,学问无捷径。👣一步一个脚印,你走过的路,每一步都算数。 阅读详情

1.清除行列
题目描述
请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。

给定一个N阶方阵int[]”>mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector>),保证n小于等于300,矩阵中的元素为int范围内。

测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]

解答
首先遍历N阶方阵,使用两个一维boolean数组分别记录值为0的元素所在的行和列;
将方阵中对应的行和列清0。

import java.util.*;

public class Clearer {
    public int[][] clearZero(int[][] mat, int n) {
        boolean[] hang = new boolean[n];
        boolean[] lie = new boolean[n];

        for(int i = 0;i<n;i++){
            hang[i] = false;
            lie[i] = false;
        }

        for(int i = 0;i<n;i++){
            for(int j = 0;j<n;j++){
                if(mat[i][j]==0){
                    hang[i] = true;
                    lie[j] = true;
                }
            }
        }

        for(int i = 0;i<n;i++){
            for(int j = 0;j<n;j++){
                if(hang[i]||lie[j]){
                    mat[i][j] = 0;
                }
            }
        }

        return mat;
    } 
}

2.翻转子串
题目描述
假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。

给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。

测试样例:
“Hello world”,”worldhello ”
返回:false
“waterbottle”,”erbottlewat”
返回:true

这道题,我感觉题目描述方式很奇怪,无法正确理解到底是要是什么;
应该是想要判断s2是否是s1中的字符循环移位得来的。

解答:
很巧妙的一个解法,将两个s1连接起来,判断s2是否其子串即可。
import java.util.*;

public class ReverseEqual {
public boolean checkReverseEqual(String s1, String s2) {
// write code here
if(s1.length()!=s2.length())
return false;

    return (s1+s1).contains(s2);


}

}

3.找到链表中倒数第k个节点
解法一:首先遍历该链表计算链表的长度length,正数第length+1-k个即为倒数第k个元素

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head == null){
            return head;
        }
        ListNode tmp = new ListNode(0);
        tmp.next = head;

        int length = 1;
        while(head.next != null){
            length++;
            head = head.next;
        }

        if(k>length)
            return head.next;

        head = tmp.next;
        int i = 1;
        while(i < (length+1-k)){
            head = head.next;
            i++;
        }

        return head;

    }
}

解法二:
使用两个指针s1和s2,s1先走k-1步,接着两个指针同时走,当s1走到链表尾部时,s2也就指向了倒数第k个元素。
因为如果队列有n个元素的话,从头走到为需要n-1步,从头走到倒数第k个元素需要走n-k补,所以就先让第一个指针走n-1-(n-k) = k-1步。

3.单个节点的删除
题目描述
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。

给定带删除的节点,请执行删除操作,若该节点为尾节点,返回false,否则返回true

这个题目系统判断有问题,不管是否删除,只要返回是正确的就判AC。

解答:
对于单链表来说,其只能知道其后置节点,而不知道前置,所以删除p的方法是,将p.next.val赋值给p.val,然后将p指向p.next.next;
(其实我觉得这个有点像单纯的改变了p的值,但没有真正的删除它,所以暂时mart一下)

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Remove {
    public boolean removeNode(ListNode pNode) {
        if(pNode == null | pNode.next == null)
            return false;
        pNode.val = pNode.next.val;
        pNode.next = pNode.next.next;
        return true;
    }
}

4.链表分割
题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前

给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。

解答:
设置两个空表l1和l2,当pHead.val

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        // write code here
        if(pHead == null||pHead.next == null){
            return pHead;
        }
        ListNode l1 = new ListNode(-1);
        ListNode l2 = new ListNode(-1);
        ListNode tmp1 = l1;
        ListNode tmp2 = l2;

        while(pHead!=null){
            if(pHead.val<x){
                l1.next = new ListNode(pHead.val);
                l1 = l1.next;
            }
            else{
                l2.next = new ListNode(pHead.val);
                l2 = l2.next;
            }
            pHead = pHead.next;
        }
        l1.next = tmp2.next;
        return tmp1.next;
    }

}

5.链式A+B
题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。

给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}

解答:
在判断链表当前节点是否为空的前提下,将对应节点上的val相加,并需要判断是否>10。
注意的地方时,对应为上的计算结果除以10赋给下一位,取余为当前位上的val;
在最后一位计算的结果同样需要判断。

import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Plus {
    public ListNode plusAB(ListNode a, ListNode b) {
        // write code here
        ListNode re = new ListNode(0);
        ListNode tmp = re;
        while(a!=null||b!=null){
            re.next = new ListNode(re.val/10);
            re.val = re.val%10;
            re = re.next;
            if(a!=null){
                re.val +=a.val;
                a = a.next;
            }
            if(b!=null){
                re.val +=b.val;
                b = b.next;
            }
        }
        //判断最高位是否需要进位
        if(re.val>=10){
            re.next = new ListNode(re.val/10);
            re.val = re.val%10;

        }


        return tmp.next;
    }
}

6.回文链表
题目描述
请编写一个函数,检查链表是否为回文。

给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。

测试样例:
{1,2,3,2,1}
返回:true
{1,2,3,2,3}
返回:false

解法:
遍历链表将其放入到一个数组中,然后从后往前遍历数组元素的值和链表中的值是否一次相等;
这里我使用的是普通的数组,需要先得出链表的长度才能够new一个数组出来,如果使用ArrayList,则便不需要了,因为它是动态分配内存空间的。

import java.util.*;

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Palindrome {
    public boolean isPalindrome(ListNode pHead) {
        if(pHead==null||pHead.next==null)
            return true;
        ListNode tmp = pHead;
        int num = 0;
        while(pHead!=null){
            num++;
            pHead = pHead.next;
        }
        int[] a = new int[num];
        pHead = tmp;
        for(int i = 0;i<num;i++){
            a[i] = pHead.val;
            pHead = pHead.next;
        }
        pHead = tmp;
        for(int i = num-1;i>=0;i--){
            if(a[i]!=pHead.val)
                return false;
            pHead = pHead.next;
        }
        return true;   
    }
}
【牛客刷题】大厂真题 | 前端面试篇(一) 牛客网是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体的招聘类网站,更是一个专注于程序员的学习和成长的平台。自学是一个程序员必备的能力,而提高自己的编程能力最好方法就是通过刷题。一次偶然的机会让我发现牛客网这个新大陆,开启自己IT之旅。这里有个大厂的面试真题,知己知彼百战百胜。更有在线编程调试功能,提高编程效率。​求知无坦途,学问无捷径。👣一步一个脚印,你走过的路,每一步都算数。 阅读详情

相关推荐

面试看牛客,刷题看力扣?那我结合其二总结出的面试刷题手册何如?天下无敌也

程序员内部一直流传这一句话: 面试看牛客 刷题看力扣 牛客网作为国内最牛的程序员面试网站,一直在程序员内部颇负盛名,其中用户更是卧虎藏龙!

Q54665642ljf的博客 1296

程序员面试金典84题之每日7题 - 第二天

第一题:翻转子串 题目: 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。 测试样例: “Hello worl...

weixin_43022263的博客 478

LeetCode,牛客面试必刷,看了这些,我把这几年大厂面试套路总结出来了!

前言 小编是一枚Android开发6年的老菜皮,面试必刷LeetCode,牛客,应该是所有程序员都了解的事情。但是你们有没有发现大厂面试出题,都有自己 特点的套路!!! 接下来我就给大家说说,我在刷牛客的时候,这么多年总结的一些经验! 一、BAT等大厂面试问题套路总结 我们先来看看各个大厂面试答题流程 阿里巴巴 腾讯 百度 小米 看上面的面试题,都是牛客网里随便搜的,我用红色圈出来的,都是大厂面试时,最喜欢问的Android知识点,几乎每家大厂必问! 面试,开始: 1.自我介绍 2.计算机网络

Android725的博客 1105

翻转子串(string+KMP+程序猿面试金典)

翻转子串 參与人数:1197时间限制:3秒空间限制:32768K通过比例:35.03%最佳记录:0 ms|8552K(来自) 题目描写叙述 假定我们都知道很高效的算法来检查一个单词是否为其它字符串的子串。请将这个算法编写成一个函数。给定两个字符串s1和s2。请编写代码检查s2是否为s1旋转而成。要求仅仅能调用一次检查子串的函数。 给定两个字...

weixin_30322405的博客 186

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4372

AniME框架深度体验:用AI自动生成《修真小说》动画全流程记录

本文详细记录了使用开源多智能体框架AniME,结合其核心动画生成模型AniSora V3,将一段修真小说文本自动转化为风格统一动画视频的全流程实战。文章深入解析了从环境搭建、导演智能体任务分解,到多智能体协作生成分镜、角色、动画及最终合成的每一步操作与挑战,为AI驱动的长视频创作提供了宝贵的实践经验与流程优化思路。

ol789012345的博客 625

程序员面试金典算法题

空格替换 题目描述 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。 测试样例: “...

weixin_33847182的博客 312

[A-21]ARMv8/v9-SMMU系统架构和功能概述

本文简述了SMMU的系统架构和核心功能

基层架构师的分享 1723

8.翻转子串

题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。 给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。 测试样例: "Hello world","wo...

牛肉干的博客 290

ASP.NET MVC5 C# Entity Framework 连接 Oracle 数据库

ASP.NET MVC5 C# Entity Framework 连接 Oracle 数据库创建数据库安装 Entity Framework配置数据库连接字符串添加实体模型类添加数据库上下文类添加控制器类运行测试 创建数据库 创建【全局数据库名】为 demodb 的Oracle数据库,用 SYSTEM 用户连接成功后创建【用户名】为 DJIANG 的用户,并授予该用户 DBA 角色 安装 Enti...

idjiang的博客 2537

【k8s面试】超详细kubernetes面试题总结,面试必问!(附200道K8s Docker面试真题+答案详解

最近很多小伙伴找我要Linux学习资料,于是我翻箱倒柜,整理了一些优质资源,涵盖视频、电子书、PPT等共享给大家!

2401_83620959的博客 1464

最新800道面试题和43道JAVA算法/数据结构面试题

1、题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 2、题目: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 3、题目: 给定一颗二叉搜索树,请找出其中的第k大的...

Java烂猪皮 1056

ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱

不过,多传感器标定工具箱允许通过编辑 yaml 文件来调整标定目标的参数: <repository>/mutlisensor_calibration/cfg/TargetWithCirclesAndAruco.yaml%YAML:1.0rows: 4cols: 1dt: irows: 4cols: 2dt: frows: 1cols: 12dt: fCAD 模型网格/云通过 GICP 将模型数据与分割点云对齐,用于优化检测到的目标姿态。

2506_90492529的博客 2107

程序员面试金典

偶然发现牛客网程序员面试金典在线编程题和学习算法经验:

ZCC的专栏 882

图解移动机器人中的运动规划(Motion Planning),附几十种规划算法

运动规划是移动机器人的核心理论和工程技术之一,本文作为教程先导,解析了运动规划的两大组件——路径规划和轨迹规划。欢迎感兴趣的同学订阅专栏!

FRIGIDWINTER的博客 4万+

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7744

《程序员面试金典》题解

程序员面试金典-渐进式题解 本题解意在提供每道题目从小白能想到的方法,逐步到(近乎)最优方法,并且一一给出代码。欢迎讨论和指出错误。 1.1字符串 确定互异字符串 题目描述 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符...

weixin_34197488的博客 490

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

牛客网 | 程序员面试金典_编程题 | 原串翻转

方法一 class Reverse { public: string reverseString(string iniString) { reverse(iniString.begin(), iniString.end()); return iniString; } }; 方法二 class Reverse { public: strin...

李昊的博客 400

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

程序员面试金典1

1.第k个数(丑数) 剑指offer里有此题,但是其认为1为第一个丑数。 牛客网上此题认为1不为丑数,但是如果要正确计算的话,那么必须设置第一个丑数为1,那么求第k个数就转化为求第k+1个数 class KthNumber { public: int findKth(int k) { // write code here ...

121

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

牛客之程序员面试金典_ 编程题(一)

1.确定字符串互异 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代表存在相同的字符。保证字符串中的字符为ASCII字符。字符串的长度小于等于3000。 测试样例: “aeiou” 返回:True “BarackObama” 返回:F...

JSJWR的博客 601

最接近的数 牛客网 程序员面试金典 C++ Python

最接近的数 牛客网 程序员面试金典 C++ Python 题目描述 有一个正整数,请找出其二进制表示中1的个数相同、且大小最接近的那两个数。(一个略大,一个略小) 给定正整数int x,请返回一个vector,代表所求的两个数(小的在前)。保证答案存在。 测试样例: 2 返回:[1,4] C++...

dianwonin4433的博客 86

《程序员面试金典》确定两串乱序同构

【 声明:版权所有,转载请标明出处,请勿用于商业用途。  联系信箱:libin493073668@sina.com】 题目链接:http://www.nowcoder.com/practice/164929d4acd04de5b0ee2d93047b3b20?rp=1&ru=/ta/cracking-the-coding-interview&qru=/ta/cracking-

月下的寂寞肖邦 1007

程序员面试金典——18.13 最大字母矩阵

程序员面试金典——18.13 最大字母矩阵 在牛客网上把此题的难度给大大降低了。。。。。。。。。 Solution1: 参考网址:https://www.nowcoder.com/questionTerminal/270ff3b150704f8795fd4a944a7e043a 原题比较复杂,牛客网上给简化为求某个单词出现次数和长度的最大值了 class AlphaMatrix { pu...

Allenlzcoder的博客 385

牛客支招 | 面试时,如何在线考核程序员代码能力?

随着远程办公技术的发展,“视频会议”已经广泛应用于大型企业的日常办公场景中,比如HR招聘场景。在面试前,候选人和面试官需要下载相应的APP。 然而,据一些IT互联网企业的HR反应:“视频会议”应对职能类、市场类、销售类等仅需要口头沟通的职位尚可,但也很难实现面试信息的现实流转,而对于以程序员为主的技术岗位,普通“视频会议”软件并不具备在线“代码考核”的功能。企业需要选择专业的在线面试工具,来满足大体量的技术类岗位招聘所需。 牛客网,是国内知名的面向IT、技术求职者的能力提升平台,以及面向企业数字化招

新一代数智化校园招聘引领者 2659

程序员面试金典——17.1无缓存交换

程序员面试金典——17.1无缓存交换 主要是利用异或性质~ 程序员面试金典——17.1无缓存交换 class Exchange { public: vector&lt;int&gt; exchangeAB(vector&lt;int&gt; AB) { // write code here if(AB.size() &lt;= 1) ...

Allenlzcoder的博客 296

程序员面试金典:双栈排序、二叉平衡检查、输出单层节点

学习并总结了牛客网上的《程序员面试经典》的部分算法题

热爱技术、喜欢学习、乐于分享 527
上一篇: java线程池和volatitle关键字
下一篇: 排序算法总结(一)——选择排序
小菜鸟要高飞
博客等级 码龄12年 14粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值