LeetCode算法题解——双指针2
创始人
2024-05-24 02:01:45
0

LeetCode算法题解——双指针2

  • 第五题
    • 思路
    • 代码
  • 第六题
    • 思路
    • 代码
  • 第七题
    • 思路
    • 代码

这里介绍双指针在数组中的第二类题型:两端夹击。

第五题

977. 有序数组的平方

题目描述:
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。

示例1:

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

思路

因为是排序每个数字的平方,根据二次函数图像y=x^2开口向上可得,最大值在两端,最小值在中间。所以,最左和最右进行比较,两端夹击,看谁的平方值更大。

代码

class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length;int[] result = new int[n];int l = 0;int r = n - 1;int k = n - 1;while(l <= r){if(nums[l] * nums[l] > nums[r] * nums[r]){result[k] = nums[l] * nums[l];l++;k--;}else{result[k] = nums[r] * nums[r];r--;k--;}}return result;}
}

第六题

167. 两数之和 II - 输入有序数组

题目描述:
给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。
函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。

示例1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。

思路

可以先考虑边界情况。升序数组中任意两个元素求和,最小为nums[0]+nums[1],最大为nums[n-2]+nums[n-1]。target的范围一定在这两者之间,否则找不到答案。所以,我们可以两端夹击,一直手抓nums[0],另一只手抓nums[n-1]。如果是最小的情况,那么让nums[n-1]向nums[1]靠拢;如果是最大的情况,那么让nums[1]向nums[n-2]靠拢。

代码

class Solution {public int[] twoSum(int[] numbers, int target) {int l = 0, r = numbers.length - 1;int[] result = new int[]{0, 0};while(l < r){int sum = numbers[l] + numbers[r];if(sum == target){result[0] = l + 1;result[1] = r + 1;break;}else if(sum < target){l++;}else{r--;}}return result;}
}

第七题

633. 平方数之和

题目描述:
给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a^2 + b^2 = c 。

示例1:

输入:c = 5
输出:true
解释:1 * 1 + 2 * 2 = 5

思路

上一题是两个数的和是否为target,这道题是两个数的平方和是否为target。一样的思路,考虑最大最小值。若两个数的平方和为target,则最小为0,最大为target的平方根。同样的,两端夹击

代码

class Solution {public boolean judgeSquareSum(int c) {long l = 0;long r = (long) Math.sqrt(c);while(l <= r){long m = l * l + r * r;if(m == c){return true;}else if(m < c){l++;}else{r--;}}return false;}
}

下一篇博客LeetCode算法题解——双指针3中,我将分享LeetCode中关于字符串的双指针问题。

参考:

Leetcode 题解 - 双指针

相关内容

热门资讯

求宠文,男主对女主超宠,宠的没... 求宠文,男主对女主超宠,宠的没话说,宠的天理难容的那种,古代现代都可以,不求虐。我想还是4ᴨne.c...
帮我女儿起个名字,本人姓卫,妻... 帮我女儿起个名字,本人姓卫,妻姓惠,农历2007年5月初十19点40生的,在此谢谢了上面还有个姐姐:...
艾薇最终能跟拉美西斯二世一起吗... 艾薇最终能跟拉美西斯二世一起吗?当然了,他们约定:相见,亦不忘却往生结果要看作者的心情,作者不高兴就...
女主带空间穿到古代又穿回现代的... 女主带空间穿到古代又穿回现代的小说《九岁小妖后》是灵魂穿越,回了现代一次,结局又回古代了。我觉得挺好...
国足要是冲击世界杯成功 会造成... 国足要是冲击世界杯成功 会造成多大的轰动? (实话实说) 会带动多大的经济效益?估计有生之年难度较大...
零之轨迹中古战场的两个游客怎么... 零之轨迹中古战场的两个游客怎么救RPG不存在什么难度吧,路上遇一个,尽头杀完BOSS救一个
初恋的含义到底是什么呢? 初恋的含义到底是什么呢?是第一个女朋友?还是第一次爱的人??既然说是“初恋”就是初次恋爱。恋爱至少需...
你们喜欢棒棒堂还是飞轮海啊? 你们喜欢棒棒堂还是飞轮海啊?都喜欢!最喜欢棒棒堂里的王子和獒犬最喜欢飞轮海里的炎亚纶和吴尊都喜欢,更...
女生想起个笔名,要两个字,要冷... 女生想起个笔名,要两个字,要冷开头!不要那么俗的名字好不好呀~冷滢,冷清,冷冷,冷青,冷月……冷鸟,...
《魔兽世界》下个版本《熊猫人之... 《魔兽世界》下个版本《熊猫人之谜》,什么名字帅气?大家都起什么名字啊?可以考虑叫功夫熊猫里面那家伙的...
蛤蟆山怎么样 蛤蟆山怎么样-山-山在天桥附近一小山顶上,一块巨石如欲腾空飞跃的-,形象逼真,因此称之为-山。传说为...
一年级重阳节主题班会教案 一年级重阳节主题班会教案 2021年一年级重阳节主题班会教案(精选7篇)   作为一位杰出的教职工...
达芬奇画鸡蛋的故事告诉们什么道... 达芬奇画鸡蛋的故事告诉们什么道理1,孰能生巧。每个成功的背后都是要比别人花更多的努力的。2,一个物体...
为什么我点进直播间左上角却没有... 为什么我点进直播间左上角却没有邀请新用户红包?是不是新用户提交的信息有错误,这也是很有可能的,或者是...
不知道自己在写些什么的成语 不知道自己在写些什么的成语如果你想找意思是“不知道自己在写什么”的成语,可以用“不知所云”. 诸葛...
倾听自然秘语之为你“桃”醉—中... 倾听自然秘语之为你“桃”醉—中1班班本课程之十二春意浓,花开正盛,桃红梨白,各种盛放的鲜花争奇斗艳。...
道教成仙可以超出轮回吗 道教成仙可以超出轮回吗不能超越六道轮回,成仙属天道,虽寿命几万岁,但福报亨尽后,往往堕落恶道。
春眠不洗脚,处处蚊子咬,夜来巴... 春眠不洗脚,处处蚊子咬,夜来巴掌声,蚊子没有了。春眠不洗脚,处处蚊子咬,夜来巴掌声,蚊子没有了。春眠...
一个小女孩手拉一只小狗代表什么... 一个小女孩手拉一只小狗代表什么生肖小狗就是生肖狗;在十二生肖里的动物里,狗是家喻户晓的动物,狗的一生...
作文童话故事 作文童话故事暑假夏令营活动开始了,小鹿参加了一个爱心实践活动,活动回家后,它很认真地对妈妈说:“妈妈...