- 博客(7)
- 收藏
- 关注
原创 代码随想录day07:第454题.四数相加II、383. 赎金信、第15题. 三数之和、第18题. 四数之和
接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。但是有一些细节需要注意,例如: 不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。数组的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
2024-01-18 23:51:21 923 1
原创 代码随想录day06:242.有效的字母异位词、349. 两个数组的交集、第202题. 快乐数、1. 两数之和
本题就需要一个集合来存放我们遍历过的元素,然后在遍历数组的时候去询问这个集合,某元素是否遍历过,也就是是否出现在这个集合,那么我们就应该想到使用哈希法了。在遍历数组的时候,只需要向map去查询是否有和目前遍历元素匹配的数值,如果有,就找到的匹配对,如果没有,就把目前遍历的元素放进map中,因为map存放的就是我们访问过的元素。所以set 也不能用。map目的用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(也就是相加等于target)
2024-01-16 21:27:25 823 1
原创 代码随想录day04:24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、160.链表相交、142.环形链表II
若不等长,一定有一个先到尾节点,假设是tempA先到达尾节点,则B比A长,此时让tempA转向headB,在tempB到达尾节点时,tempA在B上已经移动了B-A的次数,此时让tempB转向headA,则tempA和tempB在相同长度链表上移动,一定同时到达公共节点或者尾节点。删除倒数第n个节点,因为链表是单向的,所以只能从头遍历,定义两个指针,快指针先移动n次,再同步移动慢指针,最后慢指针指向的是需要删除节点的前一个节点。情况二:假如A比B长n个节点,则A先走n个节点后,B再同时走,回到情况一;
2024-01-14 12:30:52 1017 1
原创 代码随想录day03:203.移除链表元素、707.设计链表、206.反转链表
如果temp.next.next是null(即temp.next是链表的最后一个节点,并且这个节点被移除),那么temp.next会被设置为null。因为删除的是当前节点指向的节点,这会导致多越过一个节点,使当前节点成为被删除节点J的指向的节点K,从而判断K指向的节点,导致K节点被越过。移除头结点和移除其他节点的操作是不一样的,因为链表的其他节点都是通过前一个节点来移除当前节点,而头结点没有前一个节点。当temp.next是要被移除的节点时,代码执行了temp.next =temp.next.next。
2024-01-13 00:11:59 412 1
原创 代码随想录day02:977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵
自我感觉:方法写成代码好写,但一看到题,不容易想清楚怎么将合适的方法运用,比如有序数组的平方一题中,想到了用双指针从小到大排,就很麻烦,但是若从大往下排,就很方便,因为原数组也是有序的,就算有负数,最大的平方值,也一定在原数组的两端取得。二分法:循环不变量原则,在循环中搞清楚区间的定义,左闭右闭,target在区间内包括两个端点,左闭右开,target在区间内不包括右端点,相当于右边加了个头节点,区间的定义与二分时根据mid确定新区间息息相关。不断的调节子序列的起始位置和终止位置,从而得出我们要想的结果。
2024-01-11 23:10:18 462
原创 代码随想录算法训练营第一天|704.二分查找、35、34、27.移除元素
即,从[left,right]不断查找,如果中间值大于等于target,就往左减少区间(right=mid-1),并更新leftborder=right,如果中间值小于target,就往右减少区间(left=mid+1),但不更新leftborder。比如:左闭右闭方法中在1,3,5,6中插入4,区间变化[0,3]->[2,3]->[2,1],left>right,结束循环,插入位置为2;在1,3,5,6中插入2,[0,3]->[0,0],left==right,结束循环,插入位置为1。
2024-01-10 17:08:39 942
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人