
【双指针】——左、右指针
发布日期:2021-05-07 21:20:24
浏览次数:17
分类:精选文章
本文共 1791 字,大约阅读时间需要 5 分钟。
- 左右指针在数组中实际是指两个索引值, 初始化为 left = 0, right =nums.length - 1 。
二分搜索
int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; while(left <= right) { int mid = (right + left) / 2; if(nums[mid] == target) return mid; else if (nums[mid] < target) left = mid + 1; else if (nums[mid] > target) right = mid - 1; } return -1;}
两数之和
只要数组有序, 就应该想到双指针技巧
int[] twoSum(int[] nums, int target) { int left = 0, right = nums.length - 1; while (left < right) { int sum = nums[left] + nums[right]; if (sum == target) { // 题要求的索引是从 1 开始的 return new int[]{ left + 1, right + 1}; } else if (sum < target) { left++; // 让 sum 大一点 } else if (sum > target) { right--; // 让 sum小一 点 } } return new int[]{ -1, -1};}
哈希表
//方法二 //使用了hashMap,降低了时间复杂度,时间复杂度为O(n) HashMapmap = new HashMap<>();//用一个hashMap储存值和值的下标,如果map中不包含该数值则把数值压入map中,包含的话直接返回 for (int i = 0; i < nums.length; i++) { if (map.containsKey(target - nums[i])){ return new int[]{ map.get(target - nums[i]),i}; } map.put(nums[i],i); } return null;
反转数组
void reverse(int[] nums) { int left = 0; int right = nums.length - 1; while (left < right) { // swap(nums[left], nums[right]) int temp = nums[left]; nums[left] = nums[right]; nums[right] = temp; left++; right--; }}
反转链表
public ListNode reverseList(ListNode head) { ListNode cur = head,pre = null; while (cur != null){ ListNode tmp = cur.next; // 缓存后继节点 cur.next cur.next = pre; //修改next引用指向 pre = cur; //pre暂存cur cur = tmp; //cur访问下一个节点 } return pre; }
滑动窗口法
实际上是快慢指针在数组上的应用,可以解决一大类字符串匹配的问题
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月27日 11时11分15秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
spring boot@Value和bean执行顺序问题
2019-03-05
codeforces The Eternal Immortality 题解
2019-03-05
蓝桥杯 历届试题 幸运数 (堆+DFS)
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
selenium 的介绍和爬取 jd数据
2019-03-05
layui表格checkbox选择全选样式及功能
2019-03-05
mxsrvs支持thinkphp3.2伪静态
2019-03-05
mui HTML5 plus 下载文件
2019-03-05
DSP开发板准备
2019-03-05
c++中ifstream及ofstream超详细说明
2019-03-05
c++中explicit和mutable关键字探究
2019-03-05
c语言结构体字节对齐详解
2019-03-05
linux c/c++面试知识点整理(八)
2019-03-05
linux网络编程系列(十二)--滑动窗口、拥塞控制、断线重连机制
2019-03-05
Deep residual learning for image recognition
2019-03-05
IO控制器
2019-03-05
Java 知识点总结篇(2)
2019-03-05
Python 知识点总结篇(2)
2019-03-05
Python 知识点总结篇(3)
2019-03-05
爬取网易科技滚动新闻
2019-03-05