IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 室友征服了跷跷板后,掌握了双指针 -> 正文阅读

[数据结构与算法]室友征服了跷跷板后,掌握了双指针

??前面的话??

大家好!本篇文章将介绍的剑指offerOJ题,来自力扣[剑指 Offer 57. 和为s的两个数字],本文将以这道题为背景,介绍经典的双“指针”,此“指针”非彼指针,其实叫左右索引更好一点,不要和C中的指针混起来,双指针只是一种做题技巧,但是大家都这么叫的啊,展示代码语言暂时为:Java,C/C++。

📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏??留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2021年12月30日🌴
??坚持和努力一定能换来诗与远方!
💭刷题推荐书籍:📚《剑指offer专项版》,📚《剑指offer第2版》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!



0


??剑指 Offer 57. 和为s的两个数字??

🔐题目详情

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。

示例:

输入:nums = [2,7,11,15], target = 9
输出:[2,7] 或者 [7,2]
输入:nums = [10,26,30,31,47,60], target = 40
输出:[10,30] 或者 [30,10]
来源:力扣(LeetCode)链接:剑指 Offer 55 - II. 平衡二叉树

💡解题思路

预备知识
所谓的“双指针”,其实就是利用两个数组索引界根据一定的的条件来解决问题,不要把它和C语言中的指针混为一谈哦!

解题思路:
由于该题已经为你排好序了,为升序,所以考虑从数组左右边界入手,根据题目条件对数组进行“缩圈”。不妨设数组nums左索引为left,右索引为right,目标数为target
n u m s [ l e f t ] + n u m s [ r i g h t ] > t a r g e t nums[left] + nums[right] > target nums[left]+nums[right]>target,说明两数之和大于目标数,由于数组是升序排列的,所以需要将两数之和减小,即将right1
同理 n u m s [ l e f t ] + n u m s [ r i g h t ] < t a r g e t nums[left] + nums[right] < target nums[left]+nums[right]<targetleft1
n u m s [ l e f t ] + n u m s [ r i g h t ] = = t a r g e t nums[left] + nums[right] == target nums[left]+nums[right]==target ,将两数存入一个数组返回。

🔑源代码

Java:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;

        while (left < right) {
            if (nums[left] + nums[right] > target) {
                right--;
            }else if (nums[left] + nums[right] < target) {
                left++;
            }else {
                return new int[]{nums[left], nums[right]};
            }
        }
        return null;
    }
}

C:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int* ans = (int*)malloc(sizeof(int) * 2);
    int left = 0;
    int right = numsSize - 1;

    while (left < right) 
    {
        if (nums[left] + nums[right] > target) 
        {
            right--;
        }
        else if (nums[left] + nums[right] < target) 
        {
            left++;
        }
        else 
        {
            ans[0] = nums[left];
            ans[1] = nums[right];
            *returnSize = 2;
            return ans;
        }
    }
    *returnSize = 0;
    return NULL;
}

🌱总结

由于该题已经为你排好序了,为升序,所以考虑从数组左右边界入手,根据题目条件对数组进行“缩圈”。
类似题如下:
189. 轮转数组
202. 快乐数
283. 移动零


觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!

1-99

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-01 14:11:59  更:2022-01-01 14:12:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:46:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码