![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
牛客网刷题
xinchengzhu
这个作者很懒,什么都没留下…
展开
-
2021-04-08
0交换排序 长度为n的数组乱序存放着0至n-1. 现在只能进行0与其他数的交换,完成排序。 思路:对数字array[i]来说,当array[i]与所处下标i对应不上。先将0与array[i]位置的数字交换,即swap_with_zero(array, len, array[i]); 此时0在array[i]位置,然后交换0与i即可。 /** * 交换数组里n和0的位置 * array: 存储[0-n)的数组 * len: 数组长度 * n: 数组里要和0交换的数 */ extern v.原创 2021-04-08 21:36:06 · 211 阅读 · 0 评论 -
2021-04-07
跳台阶 本质上还是斐波那契数列,所以迭代也可以求 当成 dp 问题来想的话:首先分析问题,它最终解是由前面的解累积起来的解,如何缩小问题的规模? 首先可知,第一阶有只能一步,一种;,第二阶可以两次一步、一次两步两种 若楼梯阶级 n = 3 跳 2 步到 3:剩下的是第一步没跳,起始跳到第一步只有一种 跳 1 步到 3:剩下的是第二步没跳,起始跳到第二步有两种 通过分类讨论,问题规模就减少了: 若楼梯阶级 n = n 跳 2 步到 n:剩下的是第 n - 2 步没跳,起始跳到第 n -原创 2021-04-07 11:13:29 · 61 阅读 · 0 评论 -
2021-04-06
数组中出现次数超过一半的数 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路一:数组排序后,如果符合条件的数存在,则一定是数组中间那个数。(比如:1,2,2,2,3;或2,2,2,3,4;或2,3,4,4,4等等) 这种方法虽然容易理解,但由于涉及到快排sort,其时间复杂度为O(NlogN)并非最优; class Solution原创 2021-04-06 10:07:45 · 105 阅读 · 0 评论 -
2021-04-05
一、括号序列 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列,但"(]"和"([)]"不合法。 //用栈解决 class Solution { public: /** * * @param s string字符串 * @return bool布尔型 */ bool isValid(string s) {原创 2021-04-05 22:07:31 · 413 阅读 · 0 评论 -
2021-04-01
反转链表 输入一个链表,反转链表后,输出新链表的表头。 此题想考察的是:如何调整链表指针,来达到反转链表的目的。 初始化:3个指针cur,pre,nex 1)pre指针指向已经反转好的链表的最后一个节点,最开始没有反转,所以指向nullptr 2)cur指针指向待反转链表的第一个节点,最开始第一个节点待反转,所以指向head 3)nex指针指向待反转链表的第二个节点,目的是保存链表,因为cur改变指向后,后面的链表则失效了,所以需要保存 接下来,循环执行以下三个操作 1)nex = cur->ne原创 2021-04-01 13:10:05 · 98 阅读 · 0 评论