- 博客(12)
- 收藏
- 关注
原创 代码随想录第11天
为什么不用快排呢, 使用快排要将map转换为vector的结构,然后对整个数组进行排序, 而这种场景下,我们其实只需要维护k个有序的序列就可以了,所以使用优先级队列是最优的。维护了一个单调队列,但实际也是比较上一次的最大值和新滑入的最大值,以此为此一个单调队列。思路基本差不多,但是没想到的点是,其实结果也是可以压入栈的,这样更加简洁.用栈缓存数字,碰到运算符就计算得到结果,需要注意一下字符串,运算符的判断。只要比较新滑入的数和前一个窗口的最大数的大小;注意数据结构Dqueue的使用.⚠️小顶堆的构建方式。
2024-08-09 08:27:49
127
原创 代码随想录第9天
还是想到开辟新空间,如果想要空间复杂度O(1)也可以参考上一题的全部反转,再前k个字符自己内部反转,剩下的字符再反转.正确的思路:参考昨天第一题的反转字符串,首次反转全部元素,然后针对具体单词再做针对性反转.(Java不能在字符串上修改,所以使用java一定要开辟新空间)第一想法是开辟另一个存储空间,从后往前塞....参考上一题通过两指针交换字符好像也不行.如果是C++,需要注意移除空格操作.但是如果要求空间复杂度。KMP已经忘了,复习一下.呢,会不会有更好的做法?
2024-08-06 07:51:38
210
原创 代码随想录第八天
想到一个比较复杂的快慢指针法,就是2k个元素是一个窗,在一个窗里fast走k步,slow在起始,如果属于前k,那么定义个指针i在fast和slow区间内做反转.其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的.哈哈哈,果然是有优化空间.字符串是若干字符组成的有限序列,也可以理解为是一个字符数组,但是很多语言对字符串做了特殊的规定,接下来我来说一说C/C++中的字符串。两个指针,左右互换,需要注意的细节应该是循环的条件.
2024-08-05 23:04:49
296
原创 代码随想录第七天
如果用哈希法的话,是不是可以初始化一个map,key是数组1,数组2排列组合的sum,然后value是对应的元素列表,如果有相同的则不存入map(不可以包含重复的三元组).可以用set存magazine的字符,然后从 ransomNote循环set是否有当前字符,注意set的常用操作。这里代码随想录用的是数组,消耗更小,有个技巧是string里面-'a',获得字母位置;能想到时间复杂度O(n),放在这个专题能很明显地想到,有个要点是只需要输出个数.这里提了另一种更高效的做法,就是用双指针法.
2024-08-05 22:38:36
268
原创 代码随想录第六天
按照题目的方式推演了一下,先定义一个从0-9的平方和的map,如果取每位数字,再从map取平方值,相加,得到一个新数字,继续循环这个过程,只有当使用到的是0和1的,才能认为是快乐数(因为和为1,必然是n*0+1)应该是能解的.这里考虑到用set的话,要将nums进行set,然后遍历nums,set.find(target-nums[i]),存在的话就是可以算两数之和,但是题目要求返回的是下标,set可能不能满足.换成map会更好.1、选用合适的数据结构,数组,set,map?,所以应该是要选用set。
2024-08-04 21:30:23
563
原创 代码随想录第四天
如果不相交,那么它们永远不会指向相同的内存地址。一旦某个节点相同,那么后面的链表部分也必然相同,如下面,这个如果head链表和headB中3开始相同,那next..... next->next->next... 这一坨都是一样的,所以不会出现后面又开始分叉的情况。这道题应该是有点奇怪的,看了一下代码随想录,只提到不是比较值相同,而是指向相同,再看了一下评论区,对指向相同有了更多的理解.定义快慢指针,每次都让快指针比慢指针快一步,然后让快指针循环到最后,判断一下快指针的next是否是等于慢指针所在的节点.
2024-08-04 13:55:15
711
原创 代码随想录第三天
一开始写的时候return了cur,debug了半天是空的咋办,没想到可以返回pre.....应该会有一个临时节点用来串联,但是后面的已经和前面断了,怎么连回去呢哈哈哈哈。今天的题比较简单,然而为什么我这么多细节没注意好,老是要debug才能发现.比较容易做,但是细节和边界应该不太好把握。想法同题目一,感觉也是会有一些细节问题。头结点注意好即可,实现上不算很多困难。这个先后顺序问题就能解决自己的疑惑。实现起来也比较简单,没什么难度。
2024-08-02 23:10:15
142
原创 代码随想录第二天
是可以想到的解法,但是自己写得比较啰嗦,题解里面有个精髓,通过变更i,保留之前的计算结果,这是我没有想到的,我只想到了指针的位置可以不动,hhhhh。这个题目也很常见,但是怎么找规律这个确实是问题,能想到的就是循环结束条件时怎么样的?这个题目还是比较简单,很容易想到解法,但是实现起来挺多细节需要注意的,后面刷到贪心或者动态规划时,可以拿来做比较看看。1、可以在while外面进行累加,这样的话就确确实实是对数组元素进行操作,而在超过目标值时,又通过减去多余的元素得到子序列和;
2024-07-30 22:44:58
138
原创 代码随想录第一天
1、在处理中间值大于目标值时,其实这里已知中间值大于目标值是可以直接让right=middle-1的,而不是right=middle.每次选择数组1/2的元素与target做比较,如果是大于target,则取右边数组,如果是小于target,则取左边数组;2、左闭右闭和左开右闭,两种写法不一样,需要注意.感觉认准一种方法更好,理解后总结成自己的模板。这个题目第一眼看很容易想到暴力解法,如果要求不使用额外的空间,也是很容易想到的。没什么困难,双指针还是很好实现的,这个指针怎么定义其实是很关键的.
2024-07-30 22:30:57
400
原创 笔记-第2讲:隐私计算开源如何助力数据要素流通
数据20条,确定了数据要素流转三权,三权分置期望把数据持有权和使用权分离,只有这样才能做到持有者的持有权被全面保障,而让使用权用于流通,从而促进行业发展.要达到良性循环,需要在各关键环节保证不产生泄漏,数据合规等,包括数据提供方数据提供合规,数据流通保障隐私等问题。核心:底层有完备的信任链,从硬件到应用层的整个链路,运维权限最小化。不同产品差异大,安全水位不一,这里要有个统一的产品度量尺度.流转链路:采集、存储、加工、实用、提供、传输。数据要素流转中,理想状态是数据提供方能得到。
2024-03-19 21:39:07
325
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人