华为面试手撕代码 leetcode 上重点题 附C++解法
剑指18 删除链表的节点
ListNode* deleteNode(ListNode* head, int val) {if(!head) return head;if(head->val == val) return head->next;ListNode* p=head;while(p->next && p->next->val != val){p=p->next;}if(p->next && p->next->val == val) p->next = p->next->next;return head;}
剑指52 两个链表的第一个公共节点
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
/*走过你来时的路,直到我们相遇*/
public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* l1=headA;ListNode* l2=headB;while(l1!=l2){l1= l1!=NULL? l1->next:headB;l2= l2!=NULL? l2->next:headA;}return l1; }
面试题 02.02. 返回倒数第 k 个节点
int kthToLast(ListNode* head, int k) {ListNode* slow=head, *fast=head;while(--k)fast=fast->next;while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next;}return slow->val;}
344. 反转字符串
void reverseString(vector<char>& s) {int left=0;int right=s.size()-1;while(left<right){// swap (nums[left],nums[right]) char temp = s[left];s[left]=s[right];s[right]=temp;left++; right--;}}
剑指 Offer 32 - I. 从上到下打印二叉树
vector<int> levelOrder(TreeNode* root) {vector<int> res;if(root==nullptr) return res;queue<TreeNode*> q;q.push(root); //根入队while(!q.empty()){ //此处不是 if ,是 whileTreeNode* t=q.front(); //出队q.pop();res.push_back(t->val); //出队时记录if(t->left) q.push(t->left); //左子节点入队if(t->right) q.push(t->right); //右子节点入队}return res;}
剑指 Offer 25. 合并两个排序的链表
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1==NULL) return l2;if(l2==NULL) return l1;if(l1->val<l2->val){l1->next=mergeTwoLists(l1->next,l2);return l1;}else{l2->next=mergeTwoLists(l1,l2->next);return l2;}}
783. 二叉搜索树节点最小距离
int prev, ans = INT_MAX;int minDiffInBST(TreeNode* root) {Inorder(root);return ans;}void Inorder(TreeNode* root) {if(root == NULL) return;Inorder(root->left);if(prev) // 若前置节点值不为空,则计算当前最小距离ans = min(ans, root->val-prev); prev = root->val; // 更新前置节点值Inorder(root->right);}
剑指 Offer 50. 第一个只出现一次的字符
char firstUniqChar(string s) {if(s==" ")return ' ';unordered_map<char,int> m;for(int i=0;i<s.size();i++){m[s[i]]++;}for(int i=0;i<s.size();i++){if(m[s[i]]==1)return s[i];}return ' ';}
剑指 Offer 03. 数组中重复的数字
int findRepeatNumber(vector<int>& nums){for(int i=0;i<nums.size();++i){while(i!=nums[i]){if(nums[i]==nums[nums[i]]){return nums[i];}else{swap(nums[i],nums[nums[i]]);}}}return 0;//不能少}
62. 不同路径
int uniquePaths(int m, int n) {vector<vector<int>> dp(m+1,vector<int>(n+1));//为了接下来m,n从1起,申请了一个m+1*n+1的空间dp[0][1]=1;for(int i=1;i<=m;i++){for(int j=1;j<=n;j++){dp[i][j]=dp[i-1][j]+dp[i][j-1];}}return dp[m][n];}
剑指 Offer 13. 机器人的运动范围
//计算两个坐标数字的和int sum(int i, int j){int sum=0;while(i!=0){sum+=i%10;i/=10;}while(j!=0){sum+=j%10;j/=10;}return sum;}int dfs(int i, int j, int m, int n, int k, vector<vector<int>> &visited){//i >= m || j >= n是边界条件的判断,k < sum(i, j)判断当前格子坐标是否// 满足条件,visited[i][j]判断这个格子是否被访问过if(i>=m || j>=n || k<sum(i,j) || visited[i][j] )return 0;//标注这个格子被访问过visited[i][j] = true;//沿着当前格子的右边和下边继续访问return 1 + dfs(i+1,j,m,n,k,visited)+ dfs(i,j+1,m,n,k,visited);}int movingCount(int m, int n, int k) {vector<vector<int>> visited(m,vector<int>(n,0));return dfs(0, 0, m, n, k, visited); }
79. 单词搜索
bool exist(vector<vector<char>>& board, string word) {if(board.size()==0) return false;for(int i=0;i<board.size();i++){for(int j=0;j<board[0].size();j++){if(dfs(board,word,i,j,0)){return true;}}}return false;}bool dfs(vector<vector<char>>&board,string & word,int i ,int j, int length ){if(i>=board.size() || j>=board[0].size() || i<0 || j<0 || length>=word.size() || word[length]!=board[i][j] ){return false;}if(length==word.size()-1 && word[length]==board[i][j]){return true;}char temp=board[i][j];board[i][j]='0';bool flag=dfs(board,word,i,j+1,length+1)||dfs(board,word,i,j-1,length+1)||dfs(board,word,i+1,j,length+1)||dfs(board,word,i-1,j,length+1);board[i][j]=temp; // 标记过的点恢复原状,以便进行下一次搜索return flag;}
820. 单词的压缩编码
int minimumLengthEncoding(vector<string>& words) {int N = words.size();// 反转每个单词vector<string> reversed_words;for (string word : words) {reverse(word.begin(), word.end());reversed_words.push_back(word);}// 字典序排序 sort(reversed_words.begin(), reversed_words.end());int res = 0;for (int i = 0; i < N; i++) {if (i+1 < N && reversed_words[i+1].find(reversed_words[i]) == 0) {// 当前单词是下一个单词的前缀,丢弃} else {res += reversed_words[i].length() + 1; // 单词加上一个 '#' 的长度}}return res;}
剑指 Offer 63. 股票的最大利润//华为一面手撕
/*class Solution {
public:int maxProfit(vector<int>& prices) {int m = prices.size();if(m == 0) return 0;int profit = 0;int price = INT_MAX;for(int i=0; i<m; i++){price=min(price, prices[i]);profit=max(profit, prices[i]-price);}return profit; }
};*/
class Solution {
public:int maxProfit(vector<int>& prices) {if(prices.size() <= 1)return 0;int min_price = prices[0], n = prices.size();vector<int> dp(n, 0);for(int i = 1; i < n; i++){min_price = min(min_price, prices[i]);dp[i] = max(dp[i - 1], prices[i] - min_price);}return dp[n - 1];}
};
欢迎关注公众号,干货满满。
华为面试手撕代码 leetcode 上重点题 附C++解法相关推荐
- 2023华为OD面试手撕代码经验分享
我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...
- 2023华为OD面试手撕代码真题
很多小伙伴后台私信我,让我出一些面试中的手撕代码题. 一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解.不可能会再出阅读理解一样的机试题的.但是这些题目也非常注 ...
- 蛇形打印数组(某宝典公司面试手撕代码题)
背景杂谈 不知道为什么,可能脑袋一下放空了,一不小心就想到了大约2年前,在某个知名的宝典公司面试中,遇到了一道手撕代码题,和多年前的google的那道螺旋遍历数据有异曲同工之妙.现脑洞大开,想写下与大 ...
- 前端date format_前端面试-手撕代码篇
前言 在前端面试有一个非常重要的环节,也是面试者最担心的一个环节.对"手撕代码"的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破"手撕代码 ...
- C/C++笔试面试手撕代码注意事项
C/C++笔试和面试过程中难免会要手撕代码,那么手撕代码,面试官或者看试卷的人一般会看哪些点呢?我列举了一些我认为的点(码农适用): 算法思想是否正确 代码逻辑是否清晰明了 代码风格是否美观简洁 注释 ...
- FPGA秋招面试手撕代码20+
目录 前言 1.序列检测器 (1)三段式状态机实现方式 (2)移位寄存器实现方式 2.序列生成器 (1)移位寄存器方式实现 (2)计数器方式实现 (3)三段式状态机方式实现 3.分频 (1)偶数分频 ...
- 华为面试手撕真题【最长不重复子串】
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 一道leetcode原题:力扣 虽然是一个原题,但是面试官可能会出一个不同的变种,就是不输出最长的长度,而是输出最长子串的字符串 ...
- 数字IC面试手撕代码(一)
1.最近看别人有面试说遇到这样一个问题.用状态机实现类似序列检测的题目:生成01011011101111-依次类推.针对这个问题,我设计如下的三段式状态机代码,用了4个状态,2个计数器. 设计之初,本 ...
- 华为面试手撕真题【换零钱】
给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额.计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组合能组成总金额,返回 -1 .每种 ...
最新文章
- c++语言编辑简单的计算器,c++编写简单的计算器程序
- Windows——系统盘隐藏分区功能
- 第一百零三期:解读回归测试:类型、选择、挑战和实践
- Java加密与解密的艺术~SHA算法实现
- [转载] python元组 tuple
- 数据镜像备份工具rsync + inotify
- 分析近5年胡润财富排行榜:江山已易主,这是互联网大佬的时代
- python初级樱花编程代码_python turtle绘制樱花树代码
- linux阿帕奇服务器配置方案,阿帕奇服务器_服务器配置方案_linux配置apache服务器...
- 嫡权法赋权法_组合赋权法确定权重的方法探讨
- 移动端框架之mand-mobile
- Mac安装clion教程
- 和铂医药任命陈颖颖博士为首席财务官;​劲方医药和英矽智能达成合作 | 医药健闻...
- docker仓库——搭建registry私有仓库
- 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
- 2021-IEEE论文-深度神经网络在文档图像表格识别中的应用现状及性能分析
- 测试4年裸辞失业,面试17k的测试岗被按在地上摩擦,结局让我崩溃大哭...
- C++的count函数
- 获取现在的Unix时间戳(Unix timestamp)的方法-在线时间戳转换器
- 2246xt u盘开卡详细教程_联想y700-15笔记本如何使用bios设置u盘启动【详细步骤】...