leetcode算法入门--双指针(二)
283.移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
输入: nums = [0]
输出: [0]
方法一.
从右向左扫描,当扫描到0时,利用交换的方法将所有的0转换到数组尾部
eg:
1 2 0 5 6
1 2 5 0 6
1 2 5 6 0
class Solution {
public void moveZeroes(int[] nums) {
int n=nums.length-1;
int count=0;
for(int i=n;i>=0;i--)
{
if(nums[i]==0)
{
for(int j=i;j<n-count;j++)
{
int mid=nums[j+1];
nums[j+1]=nums[j];
nums[j]=mid;
}
count++;
}
}
}
}
但是这种方法显然与双指针没啥关系,而且效率极为低下。
方法二.利用双指针中的快慢指针的方法来进行
这种方法的思想时利用一个快指针去遍历数组,然后将其中非0的元素赋值给慢指针所处的位置,即用慢指针指示非零数字的个数。
代码如下
class Solution {
public void moveZeroes(int[] nums) {
int fast=0,slow=0;
for(fast=0;fast<nums.length;fast++)
{
if(nums[fast]!=0)
{
nums[slow]=nums[fast];
slow++;
}
}
while(slow<nums.length)
{
nums[slow]=0;
slow++;
}
}
}
167. 两数之和 II - 输入有序数组
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。
以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1 和 index2。
你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。你所设计的解决方案必须只使用常量级的额外空间。
样例如下
输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum-ii-input-array-is-sorted
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
本题我的思路较为明确,由于数组是升序排列的所以对于一个数组
//[a,b,c,d,e] target=k
//由两个指针分别指向数组头和尾
//假设b+c=k
//a+e>k时,由于a<b<c<d<e为了向k靠拢只能将指向e的指针指向比e小的数即尾指针--,同理若 a+e<k,那么也只能令头指针++
//最后总结代码如下
class Solution {
public int[] twoSum(int[] numbers, int target) {
int left=0,right=numbers.length-1;
int []result=new int[2];
while(left<right)
{
int mid=numbers[left]+numbers[right];
if(mid==target)
{
result[0]=left+1;
result[1]=right+1;
break;
}
else if(mid >target) right--;
else if(mid<target) left++;
}
return result;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!