牛客82035003号
牛客82035003号
全部文章
分类
题解(161)
归档
标签
去牛客网
登录
/
注册
牛客82035003号的博客
全部文章
(共166篇)
题解 | #二进制取反#
根据首元素是0还是1确定不同的边界。 首元素是0时,左边界为0,右边界为第一个出现的‘1’的下标再减1. 首元素为1时,继续遍历,左边界为第一个出现的‘0’的下标,当然也可能遍历完也没有出现,这就是全1的情况,已是最大,那么直接返回原数即可。 有0出现确定了左边界,那么继续遍历,第...
字符串
C
2022-08-25
0
330
题解 | #修剪叶子#
其实就是删除所有叶子结点及其父节点。 1.如果为空,无可再删,返回空。 2.如果有一个孩子结点是叶结点,无论左右,父子均删,返回空。 3.如果两个孩子均不是叶子结点,左子树最终结果为递归左孩子的结果,右子树亦如此。 struct TreeNode* prun...
二叉树
C
递归
2022-08-25
0
317
题解 | #数组中只出现一次的数(其它数出现k次)#
1、对这n个数,按照从高到低考察各个位上是否为1,方法是通过将第i位的数向右移动32-i个位置到达末位,然后和1相与。最后求和sum[i]。 2、对于只出现一次的数,其二进制位值为0时,无异样,sum[i]必定是k的整数倍,取余结果为0,左移多少位都是0,累加不变; 3、对于只出现一...
数组
C
计数
2022-08-25
0
363
题解 | #01背包#
1.容量从V开始,然后逐次减1,依次找出能装下的最大物品重量。 #define max(a, b) ((a) > (b) ? (a) : (b)) int knapsack(int ...
数组
C
2022-08-25
0
274
题解 | #进制转换#
新建一个数组,根据正负性确定数组首元素是否为’-‘,然后依次取得转换进制后的数的末位,依次存入数组中,最后将数组反转(负号不反)即可。 #include<stdbool.h> #include<string.h> char* solve(int M,&...
数组
C
2022-08-24
0
290
题解 | #字符串变形#
1.先把整个字符串反转。 2.再从头开始遍历,找到单词起点记下,然后逐个字母转换大小写至这个单词末尾,然后根据单词首尾边界反转。 3.继续找下一个单词起点,以此类推 void reverse(char* s, int begin, ...
字符串
C
2022-08-23
0
392
题解 | #数字在升序数组中出现的次数#
因为是有序的,所以用二分查找更快。找到比k小的第一个数作为左边界,找到比k大的第一个数作为右边界,右-左即k的个数。 按普通找某个数的位置来找,只是把int 改为double, 找k-0.5和k+0.5 int position(int* data, int&...
数组
二分查找
C
2022-08-23
2
394
题解 | #链表中倒数最后k个结点#
1.用快慢指针,快指针先走k步,然后两指针一起走,快指针到末尾时,慢指针刚好到倒数第k个位置。 2.仅用一个指针,先全部遍历求出结点总数n,然后让指针从头开始再次遍历,走n-k次即可到达倒数第k个位置。 方法一: struct ListNode* FindKthT...
链表
C
2022-08-22
0
307
题解 | #两数之和#
先找第一个加数,因为第二个加数可能会是负数,且题中说了最小为-10,所以判断如果某个数减10之后还大于sum,那么必不可能是第一个加数,看下一个。 找到第一个加数之后,便从其后面开始找第二个,一轮遍历没找到,就把第一个加数换成下一个再重新找。 int* twoSum(int*&n...
数组
C
2022-08-22
0
360
题解 | #回文数字#
因为是int型整数,不是字符,不能用指针和数组下标分别从头尾比较。所以用除法求首位,用取余求末位,再进行比较。 #include<stdbool.h> bool isPalindrome(int x ) { ...
数学
C
2022-08-22
0
316
首页
上一页
1
2
3
4
5
6
7
8
9
10
下一页
末页