剑指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++解法相关推荐

  1. 2023华为OD面试手撕代码经验分享

    我们先来看下这个同学的面试经历吧,非常有借鉴的意义. [22届考研渣渣的od求职之旅,推荐一下两个人,德科hr和牛客的老哥] "*********",hr给了机会吧,一开始我都没想 ...

  2. 2023华为OD面试手撕代码真题

    很多小伙伴后台私信我,让我出一些面试中的手撕代码题. 一般面试的时候每一轮技术面都会出一到两个手撕代码题,这些题的特点就是,非常短小,易于理解.不可能会再出阅读理解一样的机试题的.但是这些题目也非常注 ...

  3. 蛇形打印数组(某宝典公司面试手撕代码题)

    背景杂谈 不知道为什么,可能脑袋一下放空了,一不小心就想到了大约2年前,在某个知名的宝典公司面试中,遇到了一道手撕代码题,和多年前的google的那道螺旋遍历数据有异曲同工之妙.现脑洞大开,想写下与大 ...

  4. 前端date format_前端面试-手撕代码篇

    前言 在前端面试有一个非常重要的环节,也是面试者最担心的一个环节.对"手撕代码"的考察需要面试者平时总结和积累(临时抱佛脚是不好使的),在这里笔者就自己如何攻破"手撕代码 ...

  5. C/C++笔试面试手撕代码注意事项

    C/C++笔试和面试过程中难免会要手撕代码,那么手撕代码,面试官或者看试卷的人一般会看哪些点呢?我列举了一些我认为的点(码农适用): 算法思想是否正确 代码逻辑是否清晰明了 代码风格是否美观简洁 注释 ...

  6. FPGA秋招面试手撕代码20+

    目录 前言 1.序列检测器 (1)三段式状态机实现方式 (2)移位寄存器实现方式 2.序列生成器 (1)移位寄存器方式实现 (2)计数器方式实现 (3)三段式状态机方式实现 3.分频 (1)偶数分频 ...

  7. 华为面试手撕真题【最长不重复子串】

    给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 一道leetcode原题:力扣 虽然是一个原题,但是面试官可能会出一个不同的变种,就是不输出最长的长度,而是输出最长子串的字符串 ...

  8. 数字IC面试手撕代码(一)

    1.最近看别人有面试说遇到这样一个问题.用状态机实现类似序列检测的题目:生成01011011101111-依次类推.针对这个问题,我设计如下的三段式状态机代码,用了4个状态,2个计数器. 设计之初,本 ...

  9. 华为面试手撕真题【换零钱】

    给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额.计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组合能组成总金额,返回 -1 .每种 ...

最新文章

  1. c++语言编辑简单的计算器,c++编写简单的计算器程序
  2. Windows——系统盘隐藏分区功能
  3. 第一百零三期:解读回归测试:类型、选择、挑战和实践
  4. Java加密与解密的艺术~SHA算法实现
  5. [转载] python元组 tuple
  6. 数据镜像备份工具rsync + inotify
  7. 分析近5年胡润财富排行榜:江山已易主,这是互联网大佬的时代
  8. python初级樱花编程代码_python turtle绘制樱花树代码
  9. linux阿帕奇服务器配置方案,阿帕奇服务器_服务器配置方案_linux配置apache服务器...
  10. 嫡权法赋权法_组合赋权法确定权重的方法探讨
  11. 移动端框架之mand-mobile
  12. Mac安装clion教程
  13. 和铂医药任命陈颖颖博士为首席财务官;​劲方医药和英矽智能达成合作 | 医药健闻...
  14. docker仓库——搭建registry私有仓库
  15. 【Spring源码三千问】Bean的Scope有哪些?scope=request是什么原理?
  16. 2021-IEEE论文-深度神经网络在文档图像表格识别中的应用现状及性能分析
  17. 测试4年裸辞失业,面试17k的测试岗被按在地上摩擦,结局让我崩溃大哭...
  18. C++的count函数
  19. 获取现在的Unix时间戳(Unix timestamp)的方法-在线时间戳转换器
  20. 2246xt u盘开卡详细教程_联想y700-15笔记本如何使用bios设置u盘启动【详细步骤】...

热门文章

  1. PS图层混合算法之一(不透明度,正片叠底,颜色加深,颜色减淡)
  2. cocos2d-js 使用正片叠底实现图片剪裁
  3. 全屏网格折叠动画插件
  4. SpringBoot整合Redis并实现Redis工具类
  5. 数据分析实战二:超市数据处理
  6. 小米应用使用时间统计_小米手机如何查看应用程序什么时候被使用过、被使用多长时间?...
  7. 吉利汽车的水军专黑国产品牌,用心险恶
  8. CentOS7-Docker 网络-06
  9. 6.1.5 日志管理
  10. 聊一聊微信小程序包内容