Leetcode练习 2.双指针(977.有序数组的平方,167.两数之和II-输入有序数组)


思路:因为是非递减的数组,且没有规定正负,所以一定是数组两边的数绝对值大于中间的,则平方后的数越接近两端越大,但是无法确定那一边更大。
这时候就可以用两个指针分别在两端,一边对比一边向中间走,谁大(或者小,都可以)就先把谁放到目标数组中,然后指针往中间挪一位。
直到两个指针相遇,循环结束。

//官方题解
class Solution {public int[] sortedSquares(int[] nums) {int n = nums.length;int[] ans = new int[n];for (int i = 0, j = n - 1, pos = n - 1; i <= j;) {if (nums[i] * nums[i] > nums[j] * nums[j]) {ans[pos] = nums[i] * nums[i];++i;} else {ans[pos] = nums[j] * nums[j];--j;}--pos;}return ans;}
}


思路:这道题的关键在于从“非递减数组”找到两数相加的规律,即从两端各取一个数相加,如果比目标值大,就把最大的那一端的指针前移一位,反之则把小端指针前移一位,直到找到正确的两个数。
这样用单循环就可以完成。

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

另一个思路:(二分法)可以首先固定第一个数,然后寻找第二个数,第二个数等于目标值减去第一个数的差。利用数组的有序性质,可以通过二分查找的方法寻找第二个数。
简单做个记录,不上代码了。

Leetcode练习 2.双指针相关推荐

  1. C#LeetCode刷题-双指针

    双指针篇 # 题名 刷题 通过率 难度 3 无重复字符的最长子串 24.5% 中等 11 盛最多水的容器 43.5% 中等 15 三数之和 16.1% 中等 16 最接近的三数之和 34.6% 中等 ...

  2. LeetCode+ 16 - 20 双指针、排序|暴搜、递归|双指针、排序|链表|栈、字符串

    最接近的三数之和 算法标签:数组.双指针.排序 LeetCode+ 11 - 15 给你一个长度为 n 的整数数组 nums 和 一个目标值 target.请你从 nums 中选出三个整数,使它们的和 ...

  3. LeetCode Gas Station(双指针 )

    问题:给出n个汽油站,以及相邻两站需要消耗的汽油,问可以走一圈时汽油站的下标 思路:用start,end标记起点站和终点站,当汽油剩余量大于等于0时,说明可以进入下一站,如果与起点站相遇,说明可以走一 ...

  4. LeetCode解题思路—双指针模式

    建议将思维导图保存下来观看,或点击这里在线观看

  5. 太赞了!刷题PDF终于在GitHub上开源了!覆盖字节、蚂蚁、腾讯等多家大厂真题...

    最近有有不少老铁在后台留言说,想进大厂,但是算法不好.最近我整理了一份刷题实录,这份刷题实录,也让我进了心仪的大厂.现在开放分享给大家.希望对大家有所帮助. 任何的算法题,如同写作文一样,都有一些模板 ...

  6. GitHub 发生重大改变!国内网友:Yellow居然不限制,瞧不起我?

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 来自Github中文社区 作者:huber 由于今年4月份美国爆发的反种族歧视活动,将 ...

  7. LeetCode算法题5:双指针

    文章目录 前言 一.有序数组的平方 二.轮转数组 三.移动零 四.两数之和 II - 输入有序数组 五.反转字符串 六.反转字符串中的单词 III 七.链表的中间结点 八.删除链表的倒数第 N 个结点 ...

  8. (双指针、二分Binary Search) leetcode 658. Find K closest Elements

    题意:给定一个升序排列的数组,找到k个与x最相近的元素(即差值最小),返回的结果必须要是按升序排好的.如果有两个数与 x的差值一样,优先选择数值较小的那个数. 解法一:双指针(排除法),一个一个删,因 ...

  9. leetcode 986. Interval List Intersections | 986. 区间列表的交集(双指针)

    题目 https://leetcode.com/problems/interval-list-intersections/ 题解 本题用双指针.(想了下,也可以用线段树,和天际线那道题类似) clas ...

最新文章

  1. 如何在 Azure 中的 Linux 经典虚拟机上设置终结点
  2. 工作原理是什么_磁翻板液位计工作原理是什么?
  3. HTTP中CORS跨域请求的实现(C++|Qt框架实现)
  4. jQuery框架学习第三天:如何管理jQuery包装集
  5. 抓人眼球!插画风精美的网站首页设计欣赏
  6. 计算机考研数据结构算法模板
  7. [Flink]Flink DataStream window join 和interval join
  8. html range样式修改,自定义(滑动条)input[type=range]样式
  9. 第一篇:工作之我见一-----------细节决定成败(1)
  10. 《Windows游戏编程大师技巧》中关于DirectDraw和创建DirectDraw知识笔记
  11. 第二章 Jsp基本语法
  12. emu8086的入门使用
  13. 淘宝,京东,苏宁易购技术架构(路线)分析和比较
  14. java项目开发实例java+ssh+mysql实现的共享自行车单车租赁|出租管理系统
  15. 提取gps经纬度信息
  16. EN300328测试软件,蓝牙耳机EN300328测试项目。
  17. Python+Vue计算机毕业设计报刊征订管理系统uu609(源码+程序+LW+部署)
  18. 格拉姆--施密特(Gram-Schmidt)正交化方法笔记
  19. Frida Internal - Part 1: 架构、Gum 与 V8
  20. outlook计算机应用基础,计算机应用基础--outlook操作题1

热门文章

  1. git安装问题解决方案
  2. (98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
  3. 转 ext文件系统及块组
  4. 周志华《机器学习》第三章课后习题
  5. android中c文件怎么加logo,c – 如何在CMake中添加“-l”(ell)编译器标志
  6. STC51单片机数码管显示程序和仿真
  7. 【无标题】 6UVPX 总线架构的高性能实时信号处理
  8. Commvault恢复时间超过2小时,网络断开问题
  9. 无极性的电容能代替有极性的电容吗?
  10. 7-12 h0004.双倍