
笔试
hdu_xiaoming
鹅厂打工人。
展开
-
【每日一题】位操作的小技巧
该技巧可用于解决191. 位1的个数 和 231. 2的幂 。主要操作是 n &= n-1,这个操作可以去除二进制数的最后一个1。那么对一个整数循环使用此操作并进行计数,就可以统计出整数中有多少位1。也就是191题的思路,代码很简洁:public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0;原创 2020-08-10 22:22:29 · 278 阅读 · 0 评论 -
【每日一题】力扣腾讯精选练习题50 -- 2.两数相加
题目:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路本题从思路上来说并不难,就是创建一个新的链表,依次判断两个链表上原创 2020-07-20 14:56:47 · 362 阅读 · 0 评论 -
剑指offer解题汇总(2)
11. 旋转数组的最小数字思路1:暴力。依次遍历一遍数组,碰到后一个元素小于前一个的,即为最小元素。时间复杂度:O(n),空间复杂度O(1)思路2:折半法。从中间将数组拆分,可以得到两个子数组,一个子数组是非递减的,一个自旋的数组(自旋数组的最后一个元素小于第一个数组)。还按照这种方式继续折半查找,直到最终数组只有两个值,小的那个即是最小值。时间复杂度:O(log n),空间复杂度O(1)注意: 有一种特殊情况,如果允许有相同的值出现,则可能会有左、中、右节点值相同的情况出现。此时无法判断哪边是旋原创 2020-07-16 20:51:09 · 180 阅读 · 0 评论 -
【每日一题】124. 二叉树中的最大路径和
题目给定一个非空二叉树,返回其最大路径和。本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。示例 1:输入: [1,2,3] 1 / \ 2 3输出: 6示例2输入: [-10,9,20,null,null,15,7]-10/ 9 20/ 15 7输出: 42思路个人感觉本题题意不是很明确(可能是我理解的问题),在题意的思考上花了较多时间。最后还是没有思路,看了官方的答案。。。很多人说这题并不难原创 2020-07-14 07:44:34 · 221 阅读 · 0 评论 -
【设计模式】重复造轮子之手撕单例模式
设计模式在面试中经常会被问到,单例模式是设计模式中被问到频率最高的(应该)。相关的博客其实已经非常多了,为了增强记忆水博客还是来整理一下。实现单例模式的方式大致有以下几种:饿汉模式顾名思义,这种方式由于饥饿会在类加载时就把对象创建好。这种方式是线程安全的,因为不涉及多线程重复创建的问题,但是缺陷在于会浪费资源。毕竟我可能还不需要用到这个实例,创建了就会白白浪费资源。如果类很少影响还不大,如果是一个第三方框架,有大量的类,那么可能就会对性能产生影响。上代码~~public class Singleto原创 2020-07-12 15:05:11 · 222 阅读 · 0 评论 -
【笔试面试】研发岗面试算法高频题
二叉树的右视图题目给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。输入: [1,2,3,null,5,null,4]输出: [1, 3, 4]解释:1 <—/ 2 3 <—\ 5 4 <—思路主要思路是依次(根,左,右)将节点压入栈内,再用一个栈存储节点对应的深度。用一个HashMap存储一层的最右边的节点。从栈内取出节点和深度。更新维护当前最.原创 2020-07-11 22:26:51 · 326 阅读 · 0 评论 -
【每日一题】142. 环形链表 II
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。难度: mid思路本题在面试中出现的频率较高,需特别注意下。常见的解法有两种:1.使用HashSet存储ListNode引用,依次遍历整个链表。若当前节点未在HashSet出现过,则将其加入set中,继续遍历下一节点。若已经在set中存在,则表示找到入口,直接返回。该原创 2020-07-11 17:11:27 · 205 阅读 · 0 评论 -
【每日一题】148. 排序链表
要求:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5思路由O(n log n) 的时间复杂度联想到二分法,从而想到归并排序。如果使用的是数组,则需另外开辟n的空间,本题是链表无需开辟额外空间。如果使用递归做法,空间复杂度为O(log n)原创 2020-07-10 15:37:16 · 233 阅读 · 0 评论 -
【基础算法】常用内部排序算法总结--快速排序
先来说下面试中常问到的快速排序算法。快排算法属于交换排序算的一种,时间复杂度O(nlogn),空间复杂度O(logn)~O(n),是一种不稳定的排序算法。快排的核心思想是每次将枢纽值(一般选择第一个元素为枢纽值)移动到最终位置。然后对最终位置两边的子数组分别采用快速排序,直到子数组的长度为1时终止。递归版本的快排代码如下:public static voidquickSort(int[] list, int low, int high) { if (low >= high) return; i原创 2020-07-09 16:28:03 · 217 阅读 · 0 评论 -
【每日一题】23. 合并K个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例输入[1->4->5,1->3->4,2->6]输出1->1->2->3->4->4->5->6思路参考力扣大佬的思路,仅仅将比较器使用lambda语法简化。主要思路是使用优先队列,步骤如下:1.依次将各个有序链表的表头压入优先队列(小顶堆);2.构建一个虚拟表头,当队列非空时,将队列中的元素弹出,接在虚拟表头后面;3.如果弹出原创 2020-07-09 10:24:00 · 221 阅读 · 0 评论 -
【Java基础】java反射使用
目录定义优点缺点常用方法获取Class对象的三种方式类相关常用方法获得类中属性(Field)获得类中方法(Method)Field类方法Method类方法其他重要方法总结定义java反射是指在程序运行过程中,对于任意一个类,能够获取其所有的属性和方法;对于一个对象,可以调用其所有的方法,修改其所有的属性。该种能够动态获取信息或调用对象方法的功能称为反射。优点增加程序灵活性,运行时根据需要动态加载类。缺点性能较差。破坏封装性。暴露内部细节。常用方法获取Class对象的三种方式原创 2020-07-08 16:20:56 · 149 阅读 · 0 评论 -
【面试准备】计算机网络面试题汇总
持续更新中…简述计算机网络体系结构原创 2020-07-07 22:17:05 · 301 阅读 · 0 评论 -
java getClass()的一些小实验
最近做的一些笔试题经常遇到考 getClass()方法相关的知识点,今天整理出来总结下。先来定义两个类:People类是父类,Student类继承自父类。class People { String name; int age; // 父类无参构造方法 People () {} People (String name, int age) { this.name = name; this.age = age; } vo原创 2020-06-24 22:16:13 · 286 阅读 · 0 评论 -
【面试准备】操作系统面试题汇总
问: 进程线程的区别:首先,进程是资源分配的最小单位;线程的CPU调度的最小单位。进程是应用程序执行的实例,线程的粒度比进程更小,更轻量,一个进程可以包含多个线程。创建或者撤销进程时,需要分配或者回收资源,所耗费的开销远大于创建或者撤销线程的开销。一个进程的多个线程之间共享同一块地址空间。因此一个进程的多个线程可读取同样的数据结构和变量,通信更加便捷。相比之下,进程间的通信就要消耗更多资源。问: 用户态和内核态:内核态:cpu可以访问内存的所有数据,包括外围设备,例如硬盘,网卡,cpu也可以将..原创 2020-06-23 14:59:38 · 1164 阅读 · 1 评论 -
招银 2020秋招 java笔试题 洗牌
题目:洗牌在生活中十分常见,现在需要写一个程序模拟洗牌的过程。 现在需要洗2n张牌,从上到下依次是第1张,第2张,第3张一直到第2n张。首先,我们把这2n张牌分成两堆,左手拿着第1张到第n张(上半堆),右手拿着第n+1张到第2n张(下半堆)。接着就开始洗牌的过程,先放下右手的最后一张牌,再放下左手的最后一张牌,接着放下右手的倒数第二张牌,再放下左手的倒数第二张牌,直到最后放下左手的第一张牌。接着把牌合并起来就可以了。 例如有6张牌,最开始牌的序列是1,2,3,4,5,6。首先分成两组,左手拿着1,2,3;原创 2020-06-23 09:00:15 · 3894 阅读 · 0 评论