面试题
撷思、
这个作者很懒,什么都没留下…
展开
-
【牛客】餐馆(贪心+二分,带图解)
一、题目描述某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大。二、输入描述输入包括m+2行。 第一行两个整数n(1 <= n <= 50000),m(1 <= m <= 50000) 第二行为n个参数a,即每个桌子可容纳的最大人数,以空格分隔,范围均在32位int范围内。 接下来m行,每行两个参数b,c。分别表示第i批客人的原创 2020-05-12 17:30:35 · 889 阅读 · 0 评论 -
【牛客】统计回文
一、题目描述“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个 礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办 法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。例如: ...原创 2020-03-11 17:13:11 · 129 阅读 · 0 评论 -
【牛客】汽水瓶
一、题目描述有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?...原创 2020-03-06 00:37:01 · 173 阅读 · 0 评论 -
Java面试总结(一)
1、如何理解面向对象。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。2、面向对象的三大特性,对于多态怎么理解,类型转换怎么体现多态性的(其实是想问向...原创 2020-03-02 23:06:16 · 105 阅读 · 0 评论 -
【LeetCode】443.压缩字符串
题目描述:给定一组字符,使用原地算法将其压缩。压缩后的长度必须始终小于或等于原数组长度。数组的每个元素应该是长度为1的字符(不是 int 整数类型)。在完成原地修改输入数组后,返回数组的新长度。进阶:你能否仅使用O(1) 空间解决问题?注意:所有字符都有一个ASCII值在[35, 126]区间内。 1 <= len(chars) <= 1000。解题思路:空间...原创 2020-02-09 22:51:15 · 250 阅读 · 0 评论 -
【LeetCode】66.加一
题目描述:给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。解题思路:根据题目可知,加一之后会有以下几种情况:①末尾数字非9,加1即可;②加1后需要进位,但在中间停止进位,如果当前位%10为0,那么前一位加1,直到当前位%10不为0,则进位结束;③加1需要进位,且...原创 2020-02-09 21:24:27 · 100 阅读 · 0 评论 -
【LeetCode】724.寻找数组的中心索引
题目描述:给定一个整数类型的数组nums,请编写一个能够返回数组“中心索引”的方法。我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相加的和。如果数组不存在中心索引,那么我们应该返回 -1。如果数组有多个中心索引,那么我们应该返回最靠近左边的那一个。说明:nums的长度范围为[0, 10000]。 任何一个nums[i]将会是一个范围在[-...原创 2020-02-08 00:48:25 · 115 阅读 · 0 评论 -
【LeetCode】905.按奇偶排序数组
题目描述:给定一个非负整数数组A,返回一个数组,在该数组中,A的所有偶数元素之后跟着所有奇数元素。你可以返回满足此条件的任何数组作为答案。提示:1 <= A.length <= 5000 0 <= A[i] <= 5000解题思路:利用快排的思想进行原地改变,将之前的分组标准变成是否为奇数或偶数。具体实现:class Solution {...原创 2020-02-06 17:55:07 · 93 阅读 · 0 评论 -
【LeetCode】977.有序数组的平方
题目描述:给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。提示: 1 <= A.length <= 10000 -10000 <= A[i] <= 10000 A已按非递减顺序排序。 解题思路:首先想到的是暴力解决,先对A中的元素进行平方,然后再使用函数进行排序,但是显然这样不妥,...原创 2020-02-05 00:48:34 · 102 阅读 · 0 评论 -
【LeetCode】58.最后一个单词的长度
题目描述:给定一个仅包含大小写字母和空格' '的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。如果不存在最后一个单词,请返回 0。说明:一个单词是指仅由字母组成、不包含任何空格的 最大子字符串。解题思路:因为要计算最后一个单词的长度,所以最直观的方法是从后向前遍历,如果遇见的第一个元素为“空格”,那么就让结尾指针向前移动一步...原创 2020-02-03 19:25:23 · 108 阅读 · 0 评论 -
【LeetCode】9.回文数
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。进阶:你能不将整数转为字符串来解决这个问题吗?解题思路:通常我们会想到将整数转换成字符串,然后再存储到数组中,对数组进行反转,然后与原数组中内容进行对比,但是题目中要求不将整数转为字符串,那么我们就使用数学方法,先判断数字是否小于0,如果小于0,则返回false,如果是正数,则将其倒序数值...原创 2020-02-03 12:33:40 · 87 阅读 · 0 评论 -
【LeetCode】383.赎金信
题目描述:给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串ransom能不能由第二个字符串magazines里面的字符构成。如果可以构成,返回 true ;否则返回 false。(题目说明:为了不暴露赎金信字迹,要从杂志上搜索各个需要的字母,组成单词来表达意思。)注意:你可以假设两个字符串均只含有小写字母。 canConstruct("a",...原创 2020-02-03 00:01:05 · 209 阅读 · 0 评论 -
【LeetCode】217.存在重复元素
题目描述:给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。解题思路:思路一,对数组进行遍历,如果发现数组中有相同元素那么就返回true,否则返回false;思路二,首先对数组进行排序,那么如果有重复元素,则一定是相邻的,即只需比较i与i+1处元素即可;思路三,利用set去重的性质,如果去重后的长度小...原创 2020-02-02 01:28:22 · 85 阅读 · 0 评论 -
【LeetCode】150.逆波兰表达式求值
一、题目描述:根据逆波兰表示法,求表达式的值。有效的运算符包括+,-,*,/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。 二、解题思路:逆波兰表达式实际为后缀表达式,是每一运算符都置于其运算对象之后,它的优势在于只用两种简单操作,...原创 2020-01-15 23:33:19 · 245 阅读 · 0 评论 -
【LeetCode】88.合并两个有序数组
一、题目描述:给定两个有序整数数组nums1 和 nums2,将 nums2 合并到nums1中,使得num1 成为一个有序数组。说明:初始化nums1 和 nums2 的元素数量分别为m 和 n。 你可以假设nums1有足够的空间(空间大小大于或等于m + n)来保存 nums2 中的元素。二、解题思路:(1)最暴力的解法就是把两个数组合并,然后对合并后的数...原创 2020-01-15 00:58:55 · 131 阅读 · 0 评论 -
【LeetCode】35.搜索插入位置
题目描述:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。解题思路:普通做法是遍历数组,循环内部判断数组元素是否和被查找元素相同,相同(找到了)和大于(没找到但因为是排序数组,所以应当在此处插入)的情况下直接返回索引值即可。但题目中已知该数组为排序数组,所以我们可以使用更快捷的方式,即二分查...原创 2020-01-13 14:45:25 · 91 阅读 · 0 评论 -
【LeetCode】27.移除元素
题目描述:给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解题思路:考虑双指针的方式,一个用来遍历数组,另一个则是存储需要保留的元素下标,实际为保留nums中不等于va...原创 2020-01-13 13:46:46 · 81 阅读 · 0 评论 -
【LeetCode】709.转换成小写字母
题目描述:实现函数 ToLowerCase(),该函数接收一个字符串参数 str,并将该字符串中的大写字母转换成小写字母,之后返回新的字符串。解题思路:第一种思路,我们可以直接使用toLowerCase方法,将字符串中所有字母变成小写,最后返回改变后的字符串;第二种方式是,先把字符串转为字符数组,然后对数组进行遍历,如果字符是大写就转小写,通过ASCII码进行转换。具体实现:cl...原创 2020-01-11 09:25:31 · 161 阅读 · 0 评论 -
【LeetCode】二叉树(进阶题1)
使用非递归方式,对二叉树进行,前序、中序、后序遍历。import java.util.Stack;public class BinaryTree { class TreeNode{ public int val; public TreeNode left; public TreeNode right; public TreeNode(int val) {this....原创 2019-11-18 22:39:36 · 57 阅读 · 0 评论 -
【LeetCode】二叉树(基础题2)
1、判断两个二叉树是否相同给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。具体代码:class Solution { public boolean isSameTree(TreeNode p, TreeNode q) { if(p == null && q == null){...原创 2019-11-17 15:23:13 · 126 阅读 · 0 评论 -
【LeetCode】二叉树(基础题1)
1、给定一个二叉树,返回它的前序遍历。解题思路:因为题目要求最终返回二叉树的前序遍历结果,因此我们要使用List将遍历结果保存下来,前序遍历遵循先访问根节点,再递归遍历左子树,最终递归遍历右子树。具体代码:class Solution { public List<Integer> preorderTraversal(TreeNode root) { ...原创 2019-11-07 20:07:01 · 107 阅读 · 0 评论 -
【LeetCode】栈和队列(一)
一、括号匹配问题给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:(1)左括号必须用相同类型的右括号闭合。(2)左括号必须以正确的顺序闭合。注意:空字符串可被认为是有效字符串。解题思路:遇到左括号就入栈,如果遇到右括号则取出栈顶元素,看看栈顶元素和当前元素是否匹配,如果字符串遍历完后,同时栈也为空,则为匹配的情况。完整代...原创 2019-11-05 10:49:12 · 141 阅读 · 0 评论 -
【LeetCode】栈和队列(二)
一、用队列实现栈使用队列实现栈的下列操作:push(x) -- 元素 x 入栈,pop() -- 移除栈顶元素,top() -- 获取栈顶元素,empty() -- 返回栈是否为空。注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也许不支持队列。 你可以使用 li...原创 2019-11-04 22:39:07 · 130 阅读 · 0 评论 -
【LeetCode】杨辉三角
给定一个非负整数numRows,生成杨辉三角的前numRows行,在杨辉三角中,每个数是它左上方和右上方的数的和。思路分析:(1)第一行是固定的,只有一个1。(2)第二行也是固定的,有两个1。(3)任意一行的开头结尾都是1。(4)第 i 行一共有 i 列。(5)第 i 行的第 j 列,该数字是根据 i -1行的第j - 1 列和 j 列相加所得。class Solution...原创 2019-11-02 14:19:16 · 143 阅读 · 0 评论 -
【LeetCode】链表(二)
6、编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 。解题思路:首先考虑特殊情况,若链表为空返回null,若只有一个元素返回头结点。public ListNode partition(ListNode pHead,int x){ if(pHead == null){ return null; } if(pH...原创 2019-11-06 15:29:28 · 88 阅读 · 0 评论 -
【LeetCode】链表(一)
1、 删除链表中等于给定值 “val”的所有节点。 解题思路:先考虑特殊情况,当链表为空直接返回null,想要删除指定元素则需遍历一遍链表,从第二个节点开始遍历,如果从第一个节点开始遍历,第一个节点的prev会出现空指针异常,此时创建两个结点cur用于遍历和prev用于删除,如果cur的值等于val, 利用prev删除cur,如果cur的值不等于val,则cur、prev都向后...原创 2019-10-23 19:15:19 · 214 阅读 · 0 评论 -
【剑指offer】替换空格
题目:要求写一个函数,将字符串中的空格替换为%20,样例:“i like flower”转换成“i%20like%20flower”,要求时间复杂度为O(n)。 在网络编程中,如果URL参数中有特殊字符,如空格,“#”等,可能导致服务器端无法获得正确的参数值,我们需要将这些特殊符号转换为服务器可以识别的字符。转换规则为:“%”后面跟上ASCII码的两位十六进制的表示,比如空格的AS...原创 2019-08-19 17:12:57 · 108 阅读 · 0 评论 -
【剑指offer】数组中出现次数超过一半的数字
编写函数:求数组中元素出现次数超过数组长度一半的数字,如:{ 1,4,5,4,2,4,7,8,4} 数字4为超过数组长度一半的数字。 首先我们要否定了先给数组排个序的想法,因为排序的时间复杂度是O(nlogn),这样的解决方法并不太好。回到题目本身思考,如果有一个数字出现次数超过了数组长度一半,那么在有序数组中,该数一定位于数组的最中间,也称其为中位数,即长度为n的数组中第n/2大...原创 2019-08-22 15:53:15 · 125 阅读 · 0 评论 -
【剑指offer】斐波那契数列
题一:写一个函数,输入n,求斐波那契数列的第n项。 首先我们所能想到的是用递归的方法求解,代码虽然简单,但是有很严重的效率问题存在,如果我们需要求f(10),那么必须要先求f(9)和f(8),以此类推,我们可以用树形结构来表示它们之间的依赖关系,不难发现其中有很多重复结点,且其数量随n的增加而急剧增大,用递归方法计算的时间复杂度是以n的指数的方式递增的。#define _C...原创 2019-08-16 16:30:31 · 97 阅读 · 0 评论 -
【面试题】指针与数组
int main(){ char *c[] = { "ENTER","NEW","POINT","FIRST" }; char **cp[] = { c + 3,c + 2,c + 1,c }; char ***cpp = cp; printf("%s\n", **++cpp); printf("%s\n", *--*++cpp+3); printf("%s\n", *cpp[-2...原创 2019-06-14 20:48:53 · 266 阅读 · 0 评论