随笔分类 -  算法

摘要:给定一个排序数组,你需要在 原地 删除重复出现的元素, 使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组 并在使用O(1)额外空间的条件下完成。 我的思路: 原地删除,不用将原数组的空间缩小,所采用的是将数组的前面部份更新为不重复的子数组然后得到该部 阅读全文
posted @ 2020-10-03 17:33 goto2091 阅读(108) 评论(0) 推荐(0) 编辑
摘要:直接找规律。 第一行 0 第二行 01 第三行 0110 第四行 01101001 可以发现,第n行的数量比第n-1行多了一倍,并且前半部分是和第n-1行一样的,后半部分是前半部分“按位取反”得到的。 第n行的字符数量是2^(n-1)个,因此第n-1行的数量就是2^(n-2)个。公式为: func( 阅读全文
posted @ 2020-10-02 15:40 goto2091 阅读(185) 评论(0) 推荐(0) 编辑
摘要:二分查找(一) 二分查找看似简单,但是有很多的细节要注意。 题目是牛客NC105,找到有序数组中第一个大于或者等于所查找的数字。 初步写了如下的代码: class Solution { public: /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 阅读全文
posted @ 2020-10-01 15:24 goto2091 阅读(165) 评论(0) 推荐(0) 编辑
摘要:首先是将中缀表达式 转换为后缀表达式 https://blog.csdn.net/qianyayun19921028/article/details/89228263 中缀转后缀是为了便于堆栈运算,此外中缀转成后缀表达式之后不带括号。 例如,表达式a+b*c+(d*e+f)*g, 中缀转后缀的基本方 阅读全文
posted @ 2020-09-24 21:25 goto2091 阅读(147) 评论(0) 推荐(0) 编辑
摘要:倒数第K个节点,重点是边界条件,以及输入情况。 具体思路: { int n; while(cin >> n){ //创建头节点 ListNode *pHead = new ListNode(-1); ListNode *p = pHead; for(int i = 0; i < n ; i++) { 阅读全文
posted @ 2020-09-24 14:22 goto2091 阅读(74) 评论(0) 推荐(0) 编辑
摘要:leetcode300 原题。 思路: 求最优解的问题,可以转化为动态规划问题,动态规划问题先要找到子问题。 子问题是什么? 要找最长上升子序列,先找子序列,再从中找到最大的。分为子问题就是,只要找到每个位置的最大子序列,那么在其中找到最大的值,就是整个数组的最大上升子序列。 每个位置的最大上升子序 阅读全文
posted @ 2020-09-24 11:33 goto2091 阅读(146) 评论(0) 推荐(0) 编辑
摘要:笔试题中遇到了求最大公约数的算法,感觉有必要研究一下。 参考 https://www.cnblogs.com/verlen11/p/4020714.html 最简单的就是辗转相除法,在算法中用递归实现。 又叫做欧几里得算法, 公式: gcd(a,b)=gcd(b, a mod b) 即a和b的最大公 阅读全文
posted @ 2020-09-23 10:32 goto2091 阅读(640) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示