Leetcode双指针刷题(一)

ops/2024/10/21 4:11:22/

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

java"> public int removeElement(int[] nums, int val) {int slow=0;for(int fast=0;fast<nums.length;fast++){if(nums[fast]!=val){nums[slow]=nums[fast];slow++;}}return slow;}

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

java"> public void reverseString(char[] s) {int slow=0,fast=s.length-1;while (slow<=fast){char temp=s[slow];s[slow]=s[fast];s[fast]=temp;slow++;fast++;}}

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = "abcdefg", k = 2
输出:"bacdfeg"
java"> public String reverseStr(String s, int k) {char[] ch = s.toCharArray();// 1. 每隔 2k 个字符的前 k 个字符进行反转for (int i = 0; i< ch.length; i += 2 * k) {// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符if (i + k <= ch.length) {reverse(ch, i, i + k -1);continue;}// 3. 剩余字符少于 k 个,则将剩余字符全部反转reverse(ch, i, ch.length - 1);}return  new String(ch);}// 定义翻转函数public void reverse(char[] ch, int i, int j) {for (; i < j; i++, j--) {char temp  = ch[i];ch[i] = ch[j];ch[j] = temp;}}

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。
java"> public int removeDuplicates(int[] nums) {int slow=0;for(int fast=0;fast<nums.length;fast++){if(nums[fast]!=nums[slow]){slow++;nums[slow]=nums[fast];}}return slow+1;}

给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列  ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1 <= index1 < index2 <= numbers.length 。

以长度为 2 的整数数组 [index1, index2] 的形式返回这两个整数的下标 index1  index2

你可以假设每个输入 只对应唯一的答案 ,而且你 不可以 重复使用相同的元素。

你所设计的解决方案必须只使用常量级的额外空间。

示例 1:

输入:numbers = [2,7,11,15], target = 9
输出:[1,2]
解释:2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
java">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};}
}


http://www.ppmy.cn/ops/15914.html

相关文章

TDengine高可用架构之TDengine+Keepalived

之前在《TDengine高可用探讨》提到过&#xff0c;TDengine通过多副本和多节点能够保证数据库集群的高可用。单对于应用端来说&#xff0c;如果使用原生连接方式&#xff08;taosc&#xff09;还好&#xff0c;当一个节点下线&#xff0c;应用不会受到影响&#xff1b;但如果使用…

什么是方法重载和重写,区别是什么?

面试题目 什么是方法重载&#xff1f;什么是方法重写&#xff1f;方法重载和重写有什么区别&#xff1f;返回值不同算不算方法重载&#xff1f; 这个是对Java基础知识的考察&#xff0c;但我们要掌握的是写重载和重写方法有什么好处&#xff0c;为什么要这样写&#xff1f; …

常见的几种垃圾回收器

什么是垃圾回收器&#xff0c;可以这样理解&#xff0c;垃圾回收算法是概念理论&#xff0c;对应JAVA中的接口&#xff0c;垃圾回收器就是具体的实现&#xff0c;JVM有很多垃圾回收器&#xff0c;它们实现了不同的垃圾回收算法&#xff0c;可以用在不同jdk版本&#xff0c;也适…

分布式技术在文本摘要生成中的应用

摘要 自然语言处理首先要应对的是如何表示文本以供机器处理&#xff0c;随着网络技术的发展和信息的公开&#xff0c;因特网上可供访问的数字文档成爆炸式的增长&#xff0c;文本摘要生成逐渐成为了自然语言处理领域的重要研究课题。本文主要介绍了分布式技术在文本摘要生成中…

react之组件与JSX

第一章 - 描述用户界面 概述&#xff1a;React是一个用于构建用户界面&#xff08;UI&#xff09;的JavaScript库&#xff0c;用户界面由按钮&#xff0c;文本和图像等小单元内容构建而成。React帮助你把它们组合成可重用&#xff0c;可嵌套的组件。从web端网站到移动端应用&a…

C++/QT + Mysql + Tcp 企业协作管理系统

目录 一、项目介绍 二、项目展示 三、源码获取 一、项目介绍 1、项目概要&#xff1a;C/S架构、数据库Mysql、C、QT&#xff1b;支持实时通信、局域网内通信&#xff0c;可多个客户端同时登录&#xff1b; 2、&#xff08;Server&#xff09;管理端&#xff1a;用户管理、…

【笔试训练】day11

1.游游的水果大礼包 思路&#xff1a; 枚举。假设最后的答案是x个a礼包&#xff0c;y个b礼包&#xff0c;得到一个式子&#xff1a;ansa*xb*y 我们可以枚举x的数量&#xff0c;这样就能变相的把y的求出来。呃这就是鸡兔同笼问题嘛 x最大的范围是多少呢&#xff1f;也就是a礼…

人工智能在现代科技中的应用和未来发展趋势

人工智能&#xff08;Artificial Intelligence&#xff0c;简称AI&#xff09;作为一种模拟人类智能的技术&#xff0c;已经在现代科技中得到广泛应用&#xff0c;并且在未来有着更大的发展潜力。 首先&#xff0c;人工智能在现代科技中的应用是非常广泛的。其中&#xff0c;最…