力扣刷题
一、数组
①双指针
1.移动0
1 | 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 |
解法:
1 | class Solution { |
解析;
//使用双指针法,index1 ,index2 同时指向开头
//index1, 遍历数组,遇到非0 的就将 index1上的放到 index2上,同时 index1和index2向前移动一位
//执行完后,再把 index2 到末尾的全部改成0
原始
4 3 2 7 8 2 3 1
0 1 2 3 4 5 6 7
第一次执行
int x=(4-1)%8=3;
num[3]=7+8=15;
4 3 2 15 8 2 3 1
0 1 2 3 4 5 6 7
第二次执行
int x=(3-1)%8=2;
num[2]=2+8=10;
4 3 10 15 8 2 3 1
0 1 2 3 4 5 6 7
第三次执行
int x=(10-1)%8=1;
num[1]=4+8=12
4 12 10 15 8 2 3 1
0 1 2 3 4 5 6 7
第四次执行
int x=(15-1)%8=6;
num[6]=3+8=11;
4 9 18 11 8 2 11 1
0 1 2 3 4 5 6 7
第五次执行
int x=(8-1)%8=7;
num[7]=1+8=9;
4 9 18 11 8 2 11 9
0 1 2 3 4 5 6 7
第六次执行
int x=(2-1)%8=1;
num[1]=9+8=17;
4 17 18 11 8 2 11 9
0 1 2 3 4 5 6 7
第七次执行
int x=(3-1)%8=2;
num[2]=18+8=26;
4 17 26 11 8 2 11 9
0 1 2 3 4 5 6 7
第八次执行
int x=(9-1)%8=0;
num[0]=4+8=12;
12 17 26 11 8 2 11 9
0 1 2 3 4 5 6 7
4+8=12
11%8=3
2.查找消失的数字(448)
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
示例 1:
输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]
示例 2:
输入:nums = [1,1]
输出:[2]
1 | // 查找消失的数字 |
二、链表
1.合并两个有序列表(21)
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
链表的合并与数组类似,都可以使用双指针方法进行快速的排序。
1 | //合并两个有序链表 |