牛客网算法题题解
就叫乾龙呀丶
一起学习机器学习,深度学习,在这里分享一下学习笔记
展开
-
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数
1. 题目描述输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。2. 题目来源第一次看到是在《剑指Offer》第2版上,面试题32。leetcode和牛客网上都有这道题。3. 解题思路考虑将n的十进制的每一位单独拿出讨论,每一位的值记为weight。1) 个位从1到n,每增加1,weight就会加1,当weight加到9时,再加1又会回到0重新开始。那么weight从0-9的这种周期会出现多少转载 2021-08-03 22:53:06 · 1911 阅读 · 0 评论 -
算法题解——矩阵的最小路径和
题目描述给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。解法一 暴力解法(会超时)比较所有可以走的路径,选择和最小的路径。采用递归的方法,限制条件:在矩阵的右边界只能向下走在矩阵的下边界只能向右走在其他地方取向右或者向下最小的路径走class Solution {public: //暴力递归 超时!! int minPathSum(vector<vecto原创 2021-07-22 22:36:10 · 1053 阅读 · 0 评论 -
算法题解——请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图
请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图题目描述如下:请根据二叉树的前序遍历,中序遍历恢复二叉树,并打印出二叉树的右视图输入:[1,2,4,5,3],[4,2,5,1,3]返回值:[1,3,5]本题目可以分为两个部分重构二叉树打印二叉树的右视图1、重构二叉树思路对于先序遍历而言,[1,2,4,5,3],列表中的1必定是二叉树的根节点,而中序遍历是左子树、根节点、右子树的顺序,故在[4,2,5,1,3]中根节点1的左边[4,2,5]就是左子树,而【3】就是右子树原创 2021-07-14 10:14:41 · 621 阅读 · 0 评论 -
atoi()函数实现
atoi()函数实现atoi()函数说将字符串转换为int数字在进行函数实现时要考虑以下几种异常情况:字符串为空字符串前面有空格要忽略判断正负号由于atoi()返回值为int类型,要注意上下界溢出判断异常字符跳出以下为代码实现int my_atoi(const char* str){ long long ret = 0; //字符串为空 if (str == NULL || *str == '\0') { return 0; } int flag = 1; //去掉原创 2021-07-12 22:29:13 · 318 阅读 · 0 评论 -
memcpy函数和strcpy函数实现
memcpy函数实现对于memcpy函数实现经常出现在面试题目中C语言标准库中定义如下void* __cdecl memcpy( _Out_writes_bytes_all_(_Size) void* _Dst, _In_reads_bytes_(_Size) void const* _Src, _In_ size_t _Size );具体原理就是按字节将Src中的内容拷贝到Dst中。这里要注意原创 2021-07-11 21:13:28 · 200 阅读 · 0 评论 -
牛客题解——容器盛水问题
容器盛水问题输入:[4,5,1,3,2]输出:5解题思路:定义双指针保存桶的左右边界决定能装多少水的是最小边双指针从两边往中间更新,遇到比最小边小的就更新容积否则更新边界。class Solution {public: /** * max water * @param arr int整型vector the array * @return long长整型 */ long long maxWater(vector<int&原创 2021-07-04 16:04:13 · 268 阅读 · 0 评论 -
算法题解——将字符串转化为ip地址
算法题解——将字符串转化为ip地址题目描述现在有一个只包含数字的字符串,将该字符串转化成IP地址的形式,返回所有可能的情况。例如:给出的字符串为"25525511135",返回[“255.255.11.135”, “255.255.111.35”]. (顺序没有关系)ip地址限制条件:ip地址一共包含4段,每段用 '.'分隔每段如果有两位及以上,则首位不能为0,如01,02每段不能大于255解题思路使用深度优先搜索DFS,附加以上限制条件,并且要确保字符串都被搜索到。代码如下:原创 2021-07-04 13:30:54 · 1813 阅读 · 0 评论 -
最长递增子序列
最长递增子序列这题好难呀,写写思路,以便后面复习。第一步:计算最长递增子序列长度首先建立两个数组res:存放递增子序列,这个数组不是最终结果,其数组大小是最长递增子序列长度。maxlen:存放以元素i结尾,形成最大递增子序列的长度遍历数组: 如果arr[i]比res最后一个元素大: 元素插入res; maxlen插入res.size + 1 否则: 在res中找到第一个大于或等于arr[i]的元素,用arr[i]替换; maxlen插入以arr[i]结尾,形成最大递增子序列的原创 2021-06-30 15:14:07 · 128 阅读 · 0 评论 -
求二叉树的层序遍历
*求二叉树的层序遍历解题思路首先采用前序遍历二叉树,遍历过程中使用depth变量记录当前层数,同一层数保存到一个数组中/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */class Solution {public: int i; vector<vector<int> > levelOrder(Tre.原创 2021-06-04 17:49:57 · 128 阅读 · 0 评论 -
实现二叉树先序,中序和后序遍历(C++)
实现二叉树先序,中序和后序遍历(C++)解题思路采用递归遍历二叉树遍历:先序遍历:访问根节点,遍历左子树,遍历右子树中序遍历:遍历左子树,访问根节点,遍历右子树后续遍历:遍历左子树,遍历右子树,访问根节点递归思路:先序遍历(根节点) if 结点为空:return; 访问(根节点); 先序遍历(根节点->左节点); 先序遍历(根节点->右节点); 中序遍历(根节点) if 结点为空:return; 中序遍历(根节点->左节点); 访问(根节点); 中序原创 2021-06-02 11:28:44 · 519 阅读 · 0 评论 -
快速排序和冒泡排序(c语言)
快速排序和冒泡排序(c语言)/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 将给定数组排序 * @param arr int整型一维数组 待排序的数组 * @param arrLen int arr数组长度 * @return int整型一维数组 * @return int* returnSize 返回数组行数 *///快速排序void fast_sort(int *arr,int left,int right){ int i = l原创 2021-05-30 18:32:18 · 283 阅读 · 0 评论 -
反转链表(C语言)
反转链表(C语言)题目描述输入一个链表,反转链表后,输出新链表的表头。/** * struct ListNode { * int val; * struct ListNode *next; * }; *//** * * @param pHead ListNode类 * @return ListNode类 */struct ListNode* ReverseList(struct ListNode* pHead ) { // write code here原创 2021-05-30 18:28:11 · 183 阅读 · 0 评论 -
算法题设计LRU缓存结构(c语言)
c语言实现LRU缓存结构LRU缓存结构LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。题目描述设计LRU缓存结构,该结构在构造时确定大小,假设大小为K,并有如下两个功能set(key, value):将记录(key, value)插入该结构get(key):返回key对应的value值[要求]set和get方法的时间复杂度为O(1)某个key的set或get操作一旦发生,认为这个key的记录成了最常使用的。原创 2021-05-30 18:21:27 · 656 阅读 · 0 评论