剑指offer(01-03)题解

简介: 剑指offer(01-03)题解

01题解–二维数组中的查找


题目描述


在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。


思路解析

重点是切记不要把这个数组当成是一直递增的,他只是保证左到右递增,上到下递增,并没有保证整体


内部都是递增,举个例子

[1,2,3,4]

[2,3,4,5]

[3,4,5,6]

[4,5,6,7]所以不能想着将它转换成一个数组然后通过二分比较来查找,这里因为里面可能有重复的元素,所以我选择的是讲个数组重新存入一个Hashset之中,这样既能排除掉重复元素,而且能直接调用Hsahset.contains()方法进行验证。


源代码

import java.util.HashSet;
public class Solution {
    public boolean Find(int target, int [][] array) {
      boolean flag=false;
      HashSet<Integer>set1=new HashSet<Integer>();
      for(int i=0;i<array.length;i++)
      {
        for(int j=0;j<array[0].length;j++)
        {
          set1.add(array[i][j]);
        }
      }
      if(set1.contains(target))
        flag=true;
    return flag;
   }
}

02题解–替换空格


题目描述


请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are

Happy.则经过替换之后的字符串为We%20Are%20Happy。


思路解析


这里我主要是通过记录空格出现位置,并且将他们存入list之中,之后通过数学规律来计算出重新插入字符的位置,但是其中有一点是需要注意的,就是在插入之前,我们需要先删除原有的空格,否则还是会出错。这里就先忽略删除空格的操作,先将插入的规律,除了第一个插入是可以直接在空格的位置进行插入,之后的插入都会出现位置的后移,这个通过下面的图来理解


20200707173246954.png

只有第一个空是直接在原来的位置插入的,但是之后的空插入可以明显发现位置已经发生后移操作,并且可以得出,该空之前每插入一个空,就会后移两格。所以后续空插入的位置适合之前有几个空有关的。


源代码


import java.util.ArrayList;
import java.util.List;
public class Solution {
     public String replaceSpace(StringBuffer str) {
      List<Integer>list=new ArrayList<Integer>();
      for(int i=0;i<str.length();i++)
      {
        if(str.charAt(i)==' ')
          list.add(i);
      }
      for(int i=0;i<list.size();i++)
      {
        if(i==0)
        {
          str.delete(list.get(i), list.get(i)+1);
          str.insert(list.get(i), "%20");
        }
        else 
        {
          int offset=list.get(i)+2*i;
          str.delete(offset, offset+1);
          str.insert(offset, "%20");
        }
      }
      return str.toString();
    }
}


03题解–从头到尾打印链表


题目描述


输入一个链表,按链表从尾到头的顺序返回一个ArrayList。

思路解析

很明显这里我们这里就是要将链表反转,我们可以通过栈来实现,栈的特性大家都知道,就是先进后出。


20200707174626630.png


源代码


import java.util.ArrayList;
import java.util.Stack;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer>list=new ArrayList<Integer>();
        Stack<Integer>stack=new Stack<Integer>();
        while(listNode!=null)
        { 
              stack.push(listNode.val);
              listNode=listNode.next;
        }  
        while (!stack.empty()) {
      list.add(stack.pop());
    }
        return list;
    }
}


相关文章
|
DataWorks 数据安全/隐私保护
dataworks配置ftp数据源?
dataworks配置ftp数据源?
204 1
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
562 210
|
3天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
226 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
792 59
|
6天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1105 157
|
6天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
474 109