首页 > 其他分享 >学习使用双指针(leetcode)

学习使用双指针(leetcode)

时间:2023-09-08 10:24:31浏览次数:33  
标签:nums int 移出 学习 ++ 数组 leetcode 指针

一、K 和数对的最大数目(JAVA)

给你一个整数数组 nums 和一个整数 k

每一步操作中,你需要从数组中选出和为 k 的两个整数,并将它们移出数组。

返回你可以对数组执行的最大操作数。

  • 示例 1:

    • 输入:nums = [1,2,3,4], k = 5

    • 输出:2

    • 解释:开始时 nums = [1,2,3,4]:- 移出 1 和 4 ,之后 nums = [2,3]- 移出2 和 3 ,之后 nums = []不再有和为 5 的数对,因此最多执行 2 次操作。

  • 示例 2:

    • 输入:nums = [3,1,3,4,3], k = 6
    • 输出:1
    • 解释:开始时 nums = [3,1,3,4,3]:- 移出前两个 3 ,之后nums = [1,4,3]不再有和为 6 的数对,因此最多执行 1 次操作。
    class Solution {
        public int maxOperations(int[] nums, int k) {
            int l = nums.length;        
            int i = 0;
            int j = l - 1;
            int n = 0;
            Arrays.sort(nums);
            while(i < j){
                if(nums[i] + nums[j] == k){
                    i++;
                    j--;
                    n++;
                }
                else if(nums[i] + nums[j] < k){
                    i++;
                }
                else{
                    j--;
                }
            }
            return n;
        }
    }
  • 思路:

    1. 先进行排序,使数组有序便于查找

    2. 双指针i和j对向进行,i只能加,j只能减

      • a. 两者和等于 k ,i++,j - -
    • b. 两者和小于 k , 说明 i 对应的值小了,i++

    • c. 两者和大于 k , 说明 j 对应的值大了,j - -

    1. 直到 i >= j

标签:nums,int,移出,学习,++,数组,leetcode,指针
From: https://www.cnblogs.com/neu71449/p/17686788.html

相关文章

  • LeetCode739——每日温度
    给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出: [1,1,4,2,1,1......
  • 双指针法删除数组里面的值
    你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明:为什么返回数......
  • Go学习笔记3
    九、错误处理1.defer+recover机制处理异常错误展示错误:发现:程序中出现错误/恐慌以后,程序被中断,无法继续执行。错误处理/捕获机制:内置函数recover:2.自定义错误需要调用errors包下的New函数:函数返回error类型3.panic有一种情况:程序出现错误以后,后续代码就没有必要执......
  • Qemu源码分析(1)—Apple的学习笔记
    一,前言开始qemu源码学习之路。从简书切换到此,真的是一键导入,太快了。二,从某个点开始分析源码Type_new函数就是把TypeInfo内容复制到TypeImpl。1.总的来说type_register_internal就是创建一个TypeImpl类,然后添加到hash表中。staticTypeImpl*type_register_internal(constTypeInfo......
  • 《Linux从入门到精通》(第2版 刘忆智 等著) 学习感受
    这本书确实是一本非常基础的入门书籍,网上评价比较高,但是它的内容是否真的有那么好,我感觉也就那样了,毕竟是非常基础的书籍,怎么写也很难写出花来。对于基本的使用不同的书籍描述应该也差不多(我没有认真看过其他书籍......
  • 代码随想录刷题记录——双指针篇
    27.移除元素题目链接快慢指针,最终返回index值为移除元素后的数组末尾元素下标+1.#include<vector>usingnamespacestd;classSolution{public:intremoveElement(vector<int>&nums,intval){//快慢指针intnums_length=nums.size();......
  • 关于传统迁移学习的一点概念
    (来源于一位学姐的口述)迁移学习的目标:训练数据集A迁移到测试数据集B,它们的数据分布不一样。方法1:特征空间的对齐。比如重要性采样,强行让两个分布比较接近。方法2:把特征分为领域无关、领域相关的部分,把这两部分提取出来。领域就是图片风格之类的东西,一些可能会影响数据......
  • Java后端学习路线经验分享--全网最靠谱
    ​简介本文是Java自学的经验分享,5个月即可入职Java后端开发岗位。我之前是自学的Java,Java零基础,用了5个月的时间,拿到了6家offer:恒生电子(12K)、九翊科技(13K)、良业科技(12K),九慧科技(9K),还有一家忘记名字了。有的东西不能复制,但学习Java的方法是可以复制的。在本站学习,你将能复制站长......
  • C++学习笔记
    练习打印金字塔goto跳转语句for循环for(表达式1;表达式2;表达式3)------外层循环{循环语句块1;for(表达式4;表达式;表达式6)-------内层循环{循环语句块2}//循环语句块1;}表达式1----->赋值语句---->用来初始化----->可......
  • 网络编程学习大纲&&网络编程1.1
    网络编程的学习大纲计算机网络体系结构模型,网络编程专业术语(socket/IP/端口号),通信时序图传输协议:TCP协议/UDP协议多进程并发服务器,多线程并发服务器网络编程IO模型:阻塞IO/非阻塞IO/多路复用/信号驱动超时接收数据方法回顾系统编程中进程的通信方式管道无名管道(只能亲......