剑指offer
丶Xylon
这个作者很懒,什么都没留下…
展开
-
华为OD面经Java
深挖项目,面试官很友好,根据项目的每个技术点和场景来提问,比如项目中数据库数据量级有多大,什么时候会出现缓慢,如何解决的,有没有经过压力测试,经过优化后性能怎么样,项目中用到的Kafka和redis都起了什么作用。因为想用结构体排序的方法只好硬着头皮用C++写,最后写完质疑我怎么没用Java写,在我讲完思路后又问了句能不能用Java写,回答能,然后就结束了。原创 2023-11-02 19:24:40 · 321 阅读 · 0 评论 -
【Leetcode】22 括号生成 递归
用递归的方法,从n=1开始,依次往左边,右边,中间加括号,中间注意去重(也可以直接用set)代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。原创 2023-11-02 19:06:34 · 267 阅读 · 0 评论 -
【LeetCode】415 字符串相加
你不能使用任何內建的用于处理大整数的库(比如。), 也不能直接将输入的字符串转换为整数形式。,计算它们的和并同样以字符串形式返回。给定两个字符串形式的非负整数。原创 2023-11-01 22:21:27 · 321 阅读 · 0 评论 -
【LeetCode】 前K个高频单词 两种解法
首先想到了map做键值对映射,记录单词的出现次数,最后造个数组排序就行,但是面试一紧张忘了map怎么用了,只能另辟蹊径,改用C++结构体,分别记录单词,出现次数,是否是第一次出现。"the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,返回的答案应该按单词出现频率由高到低排序。"i" 和 "love" 为出现次数最多的两个单词,均为2次。注意,按字母顺序 "i" 在 "love" 之前。出现次数依次为 4, 3, 2 和 1 次。个出现次数最多的单词。原创 2023-10-27 18:03:23 · 221 阅读 · 0 评论 -
【LeetCode】739 每日温度
从左往右遍历,每次记录一个值以及下标,遇到下一个比这个值还大值时,回头去记录这个值对应的下一个最大值的大小和下标,将其记录到一个新的数组里。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。,表示每天的温度,返回一个数组。原创 2023-10-25 23:23:43 · 229 阅读 · 0 评论 -
【LeetCode】881 救生艇 中等题
贪心算法,对给定数组进行排序后,从左边第一个开始,跟右边最后一个进行配对,由于每艘船最多载两人,如果当前最轻的人和最重的人加起来超过了limit,说明重的人可以自己做一辆船,轻的人再和下一个人进行配对,这样可以保证尽可能地让船载两个人。每艘船最多可同时载两人,但条件是这些人的重量之和最多为。4 艘船分别载 (3), (3), (4), (5)3 艘船分别载 (1, 2), (2) 和 (3),每艘船可以承载的最大重量为。承载所有人所需的最小船数。1 艘船载 (1, 2)原创 2023-10-25 22:23:47 · 268 阅读 · 0 评论 -
【LeetCode】1423 可获得的最大点数(中等题)
第一次行动,不管拿哪张牌,你的点数总是 1。但是,先拿最右边的卡牌将会最大化你的可获得点数。只能从左或者右依次拿牌,那么可以用滑动窗口,直接从最右边开始取K张牌,然后依次从左边开始拿一张牌,并去掉一张右边的牌。给你一个整数数组 cardPoints 和整数 k,请你返回可以获得的最大点数。每次行动,你可以从行的开头或者末尾拿一张卡牌,最终你必须正好拿 k 张卡牌。你必须拿起所有卡牌,可以获得的点数为所有卡牌的点数之和。你的点数就是你拿到手中的所有卡牌的点数之和。原创 2023-10-25 22:19:45 · 340 阅读 · 0 评论 -
【华为OD机试】分苹果
A、B两个人把苹果分为两堆,A希望按照他的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算进位 12+5=9(1100 + 0101=9),B的计算规则是十进制加法,包括正常进位,B希望在满足A的情况下获取苹果重量最多。输入苹果的数量和每个苹果重量,输出满足A的情况下B获取的苹果总重量。如果无法满足A的要求,输出-1。数据范畴: 1 <= 苹果数目 <= 20000 ,1 <= 每个苹果分量 <= 10000。原创 2023-10-21 22:28:09 · 337 阅读 · 0 评论 -
【华为OD机试】删除目录
假设,根目录的ID为0,且根目录没有父目录,其他所有目录的ID用唯一的正整数表示,并统一编号。现给定目录ID和其父目录ID的对应父子关系表[子目录ID,父目录ID],以及一个待删除的目录ID,请计算并返回一个ID序列,表示因为删除指定目录后剩下的所有目录,返回的ID序列以递增序输出。刚参与的机试,二星题反而比一星的简单,直接上结构体记录节点、父节点和删除标记,用搜索的方式递归往下删除。删除目录8,同时它的子目录10也被删除,剩余2和6两个目录。输出一个序列,表示因为删除指定目录后,剩余的目录ID.原创 2023-10-21 22:14:23 · 253 阅读 · 0 评论 -
【华为OD机试】仿 LISP 运算
将字符串中的括号、计算类型、数值依次拆分出来,然后基于栈的方法依次放入元素,遇到右括号的时候就进行一次计算,之后抛出括号内的元素再将计算后的结果放入栈,直到栈里只有一个元素,就是结果了。当前 OP 类型为 add / sub / mul / div(全小写),分别代表整数的加减乘除法,其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型。输入:(sub (mul 2 4) (div 9 3))除法遇除不尽,向下取整,即 3/2 = 1。输入:(mul 3 -7)原创 2023-10-21 20:18:00 · 192 阅读 · 0 评论 -
【华为OD机试】HJ68 成绩排序
第一行输入要排序的人的个数n,第二行输入一个整数表示排序的方式,之后n行分别输入他们的名字和成绩,以一个空格隔开。给定一些同学的信息(名字,成绩)序列,请你将他们的信息按照成绩从高到低或从低到高的排列,相同成绩。进阶:时间复杂度:O(nlogn) ,空间复杂度:O(n)按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开。注:0代表从高到低,1代表从低到高。数据范围:人数:1≤n≤200。都按先录入排列在前的规则处理。原创 2023-10-21 01:38:53 · 276 阅读 · 0 评论 -
【华为OD机试】HJ26 字符串排序
根据三个规则,规则1要对字母进行排序,不区分大小写,这个通过sort函数加重写cmp完成,规则2要按照输入时的顺序进行排序,那么就要记录这个字母的位置,可以用结构体完成,规则3就直接把非字母跳过就行。规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。规则 1 :英文字母从 A 到 Z 排列,不区分大小写。编写一个程序,将输入字符串中的字符按如下规则排序。规则 3 :非英文字母的其它字符保持原来的位置。如,输入: Type 输出: epTy。如,输入: BabA 输出: aABb。原创 2023-10-21 01:05:34 · 315 阅读 · 0 评论 -
【笔试题】华为研发工程师编程题
【笔试题】华为研发工程师编程题原创 2023-10-18 23:01:07 · 1710 阅读 · 1 评论 -
【剑指offer】字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。思路:全排列的原理,固定前面的元素,然后后面的元素依次相互交换,通过递归和回溯依次找到所有的排列组合最后的结果使用set去重代码:class Solution {public: set<原创 2020-10-16 00:19:46 · 114 阅读 · 0 评论 -
【剑指offer】左旋转字符串
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!代码:class Solution {public: string LeftRotateString(string str, int n) { if(n == 0 || str.lengt原创 2020-10-11 19:31:15 · 145 阅读 · 0 评论 -
【剑指offer】替换空格
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。Python真好用代码:# -*- coding:utf-8 -*-class Solution: # s 源字符串 def replaceSpace(self, s): return s.replace(' ','%20')...原创 2020-10-11 19:29:03 · 54 阅读 · 0 评论 -
【剑指offer】反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。链表结构struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};思路:遍历结点,将原链表头结点当尾结点,依次向前改变指针方向代码:class Solution {public: ListNode* ReverseList(ListNode* pHead) { L原创 2020-10-08 15:46:34 · 108 阅读 · 0 评论 -
【剑指offer】求1+2+3+...+n 思维题
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。代码:class Solution {public: int Sum_Solution(int n) { n&&(n+=Sum_Solution(n-1)); //n=0时n&&sum为0,自动return 0 结束递归 return n; }};..原创 2020-08-28 17:52:39 · 118 阅读 · 0 评论 -
【剑指offer】剪绳子 数论
题目描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)输出描述:输出答案。示例1输入8输出18比较取巧的做法,将n分成尽可能多原创 2020-08-28 17:36:00 · 205 阅读 · 0 评论 -
【剑指offer】链表中倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。一道经典链表题比较简单高效的解法是采用两个距离为k的指针依次遍历所有结点后左边的慢指针就是倒数第k个结点,类似于尺取法需要对链表进行判空和k非负代码:/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListN.原创 2020-08-28 16:49:03 · 123 阅读 · 0 评论