算法之路---双指针数组反转

力扣题库合集(1):双指针 双指针算法是一种非常常见且实用的算法技巧,它使用两个指针同时在数据结构上移动,从而达到特定的目的。这种算法通常用于解决数组或链表等线性数据结构中的问题,比如寻找某个元素、删除某个元素、反转数组等。对撞指针(Two Pointers): 两个指针从不同的方向"对撞"而前进,直到满足某个条件为止。这种方法常用于解决数组或链表的查找、删除等问题。快慢指针(Slow and Fast Pointers): 两个指针以不同的速度移动,比如一个指针每次移动一步,另一个指针每次移动两步。 阅读详情
class Solution {
    public int[] sortedSquares(int[] nums) {
        int[] a=new int [nums.length];
        for(int i=0;i<nums.length;i++){
            a[i]=nums[i]*nums[i];
        }
        Arrays.sort(a);
        return a;
    }
}

简单的自己做了出来,基本有了了解!

下面是一道例题!

class Solution {
    public void rotate(int[] nums, int k) {
        int n=nums.length;
        int[] newArr= new int [n];
        for(int i=0;i<n;i++){
            newArr[(i+k)%n]=nums[i];
        }
        System.arraycopy(newArr,0,nums,0,n);
    }
}

这道题有很多解法,我这个是最简单但是是最失败的,时间和空间复杂度都为O(n)。

下面这个是大神的解法,恕我看不懂,但还是感觉很牛逼!

nums = "----->-->"; k =3
result = "-->----->";

reverse "----->-->" we can get "<--<-----"
reverse "<--" we can get "--><-----"
reverse "<-----" we can get "-->----->"
this visualization help me figure it out :)

双指针算法技巧 如果您觉得有用的话,记得给,写作不易啊^ _ ^。而且听说,实在白嫖的话,那欢迎常来啊!!!滑动窗口是一种基于数组或字符串的算法技术,用于解决一些涉及连续子数组或子字符串的问题。滑动窗口的基本思想是通过维护一个窗口,该窗口在数组或字符串上滑动,从而找到满足特定条件的子数组或子字符串。 阅读详情

相关推荐

cocos2dx中DrawNode画线锯齿和非凸多边形填充

记录一下在cocos2dx中使用DrawNode所遇到的2个问题 1.画线锯齿问题 ios版本下,在AppController.mm中设置CCEAGLView的multiSampling和numberOfSamples。如下图 CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds]

hello-world 5415

数组:双指针技巧

双指针技巧 —— 情景一 在前一章中,我们通过迭代数组来解决一些问题。通常,我们只使用从第一个元素开始并在最后一个元素结束的一个指针来进行迭代。 但是,有时候,我们可能需要同时使用两个指针来进行迭代。 示例 让我们从一个经典问题开始: 反转数组中的元素。 其思想是将第一个元素与末尾进行交换,再向前移动到下一个元素,并不断地交换,直到它到达中间位置。 我们可以同时使用两个指针来完成迭代:一个从...

被一个OIER遗弃的一堆烂代码 554

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1100

算法训练Day8| LeetCode344. 反转字符串(双指针);541. 反转字符串II(模拟);offer5. 替换空格(双指针后序);151.反转字符串中的单词(综合);off58.左旋字符串

算法训练Day8| LeetCode344. 反转字符串(双指针);541. 反转字符串II(模拟);offer5. 替换空格(双指针后序);151.反转字符串中的单词(综合);offer58.左旋字符串

weixin_47284299的博客 1120

深入Linux内核:PTP硬件时间戳(HW Timestamp)是如何炼成的?

本文深入探讨了Linux内核中PTP硬件时间戳(HW Timestamp)的实现原理与实战应用。通过分析IEEE 1588协议在网络时间同步中的关键作用,详细解析了硬件时间戳在Linux内核中的架构设计、驱动开发及性能优化技巧,帮助开发者实现纳秒级精度的时间同步。

weixin_30727835的博客 651

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

【深度学习|多实例学习】多实例学习(Multiple Instance Learning, MIL)的起源、发展和应用,附代码(一)

2401_89898861的博客 1924

System.arraycopy()用法介绍

把新数组newArr复制到nums中,只是更改了nums,不用返回nums。destPos:目的数组放置的起始位置;srcPos:源数组要复制的起始位置;LC-Hot100---轮转数组。length:复制的长度.dest:目的数组;

weixin_52342529的博客 333

线结构光相机原理详解以及精度控制总结

摘要:线阵结构光相机是工业三维检测的核心设备,结合线阵相机的高分辨率与结构光的主动三维成像能力。其工作原理基于线激光投射、逐线扫描、亚像素级条纹提取及三角测量法实现三维重建。精度受硬件、校准、环境和算法四因素影响,需通过优化硬件选型(如小像元相机、窄线宽激光)、精准校准(相机内参、激光平面)、环境控制(遮光、隔振、恒温)及算法优化(Steger算法、点云后处理)来提升。典型应用(卷材、轨道检测)中深度精度可达5-20μm,需根据场景需求平衡参数配置。

start_up_go的博客 940

System.arraycopy()方法

这段代码的意思是将数组 newArr 中从索引 0 开始的 n 个元素复制到数组 nums 中,从索引 0 开始的位置开始覆盖。换句话说,它将 newArr 中的前 n 个元素复制到 nums 数组的开头位置,覆盖原有的元素。它的作用是将一个数组的某一部分(或整个数组)复制到另一个数组中的指定位置。具体来说,System.arraycopy() 方法的参数包括源数组、源数组的起始位置、目标数组、目标数组的起始位置以及要复制的元素个数。

qq_51366518的博客 994

Cadence SPB16. 6 安装流程

1.首先下载CadenceAllegroSPBorCAD16.6安装包 下载之后运行其中的setup.exe,然后先安装第一项LicenseManager 一直按next或install, 直到被询问license时,单击cancel,然后选是和finish。 2,安装Product Installtion 直接点next跳过这一步 安装完成后,点Exit退出 3.按ctrl+alt+delete打开任务管...

wangjie36的博客 5153

手把手教你用 Cursor 写一个完整的 Web 应用(含前后端 + 部署)

本文介绍如何利用Cursor AI工具从零开发一个完整的全栈待办事项Web应用。文章针对开发者常见痛点——无法独立完成项目闭环,提供了一套AI驱动的全栈开发范式。通过Vue3+Node.js+MySQL技术栈,全程由Cursor自动生成项目架构、前后端代码、数据库设计,并解决联调、部署等关键问题。重点展示了如何用AI完成:项目规划与架构设计、后端接口开发、前端页面实现、跨域联调、打包优化及云端部署全流程。该方法将传统需要3-5天的开发工作压缩至1小时内完成,产出规范可上线的项目,特别适合想突破"碎

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 639

LeetCode-189.轮转数组

leetcode轮转数组

wodengniyujiul的博客 639

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

数组反转算法:双指针技巧与面试实战解析

数组操作是算法基础中的核心内容,其中反转算法通过指针操作实现元素位置调换,体现了空间复杂度优化思想。双指针技术通过头尾指针相向移动,在O(n)时间复杂度和O(1)空间复杂度下完成操作,这种模式广泛应用于排序、搜索等场景。在技术面试中,数组类问题出现频率高达60%,考察点包括边界处理、算法选择和代码健壮性。实际工程中,类似技术可用于图像处理、缓冲区管理等场景,如OpenCV中的矩阵旋转就采用了类似原理。本文以Python实现为例,对比分析了切片、双指针和递归三种解法,并提供了防御性编程和性能测试的实践方案。

weixin_34218579的博客 373

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【双指针算法应用举例】反转链表、二分查找、有序数组的平方等

双指针算法

大龄烤红薯的博客 586

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

深入浅出:从位运算、数据结构到算法与设计模式的全面技术指南“(第九节)涵盖双指针、反转、栈等技术,深入剖析了如“删除排序数组中的重复项”、“移动零”、“旋转数组”、“括号合法性判断”、“大鱼吃小鱼”以

涵盖双指针、反转、栈等技术,深入剖析了如“删除排序数组中的重复项”、“移动零”、“旋转数组”、“括号合法性判断”、“大鱼吃小鱼”以及“字典序最小的子序列”等经典问题。

weixin_45922644的博客 991

【Leetcode刷题】:三道例题,带你走进双指针的世界

上一篇文章,我们讲到了双指针的解法。 双指针并不是指某种数据结构,而是一种解题方法 基于暴力解法的优化 其指的是利用两个变量在线性结构上遍历,进而可以解决的某些问题。 双指针一般可以用于降低时间复杂度

翼同学 1074

【算法-LeetCode】344. 反转字符串(数组方法reverse();双指针)

344. 反转字符串 - 力扣(LeetCode) 文章起笔:2021年11月14日19:16:44 问题描述及示例 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s = [“h”,“e”,“l”,“l”,“o”] 输出:[“o”,“l”,“l”,“e”,“h”] 示例 2: 输入:s = [“H”,“a”,“n”,“n”,“a”,“h”] 输出:

赖念安的博客 395

双指针算法总结

学习双指针算法的总结

weixin_44542899的博客 1625

如何反转数组?

解决方案 本博文讨论的“数组反转”是直接修改原数组,而不是重新创建一个新数组进行反转。一般有两种算法,一种是计算出两者的索引值,据此进行交换,可以参考StringBuilder类中的reverse方法;一种是利用双指针,移动数组两端进行交换。 算法实现 第一种方法的实现代码如下所示: public void reverse(int[] ar...

糖气包的博客 1358

【算法】——双指针(上)

双指针技术的核心思想是使用两个指针分别指向数据结构中的不同位置,利用这两个指针之间的关系来解决问题。通常,双指针应用于线性数据结构(如数组和链表),并通过改变两个指针的位置来达到不同的目标。相向指针:两个指针从不同的端开始,逐步向中间靠拢,通常用于查找满足某些条件的元素对。同向指针:两个指针从同一端开始,一个指针向前推进,另一个指针根据情况推进,常用于滑动窗口、动态规划等问题。双指针是一种非常高效的算法技巧,特别适用于处理数组和链表相关的题目。

小蜗牛的珍贵百宝箱 1358

算法训练营Day08-LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串中的单词 && KamaCoder54. 替换数字

LeetCode344. 反转字符串 && 541. 反转字符串 II && 151. 反转字符串中的单词 && KamaCoder54. 替换数字

rcsun的博客 1588

牛客算法题(双指针)

双指针算法题

weixin_45983532的博客 726

算法技巧总结(一)双指针

序言: 最近刷算法题时发现有的题目要求是:不要使用额外数组空间,必须在原地修改输入数组,并在使用O(1)额外的条件完成。 这对于常规的采用循环甚至双循环的方法来说空间开销就很大,而且题设要求不能开辟更多的空间,只能再原来的内存空间进行修改。因此,双指针法(双下标法)的用处就体现出来了。 那什么是双指针算法呢??? 双指针算法其实就是初始化两个指针,一个指向数组的首位置元素,另外一个指向数组的末尾的位置元素,然后根据自定义需求条件进行两指针的移动,最后是找到两个满足条件的数或者不存在这样的两个数字,.

一包辣条包邮!的博客 656

Java常见面试题:数组的反转

Java常见面试题:数组的反转: /** * 数组元素反转 * * 就是对称位置的元素反转,表示对称位置需要两个索引 * 用第三个变量进行交换 * min代表最左边的索引,max代表最右边的索引 * 当min < max时,代表反转完成,停止循环,则为条件 * min从左往右,为++ * max从又往左,为-- */ public class Demo03ArrayReve...

Virus 316

LeedCode算法思想-双指针

文章目录1. 有序数组的 Two Sum2. 两数平方和3. 反转字符串中的元音字符4. 回文字符串5. 归并两个有序数组6. 判断链表是否存在环7. 最长子序列 双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。 1. 有序数组的 Two Sum 167. Two Sum II - Input array is sorted (Easy) Leetcode / 力扣 Input:...

Jason王祖龙 1172
上一篇: 算法之路---二分查找
下一篇: 算法之路---冒泡排序
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值