为了之后找工作不被虐,每天刷3道《剑指offer》Day-1

news/2024/7/24 5:59:27 标签: 算法, 数据结构, leetcode
本文已收录于专栏
🌻
《刷题笔记》

文章目录

  • 前言
  • 💖 1、二维数组中的查找
    • 题目描述
    • 思路
  • 💖 2、替换空格
    • 题目描述
    • 思路
  • 💖 3、从尾到头打印链表
    • 题目描述
    • 思路一(反转函数)
    • 思路二(递归)
    • 思路二(栈)

前言

题目来源参考阿秀学长的刷题笔记,小戴只是把 C++的题解改成了 Java版本,并整理了其他思路,便于自己的学习~

如果解题有更好的方法,本文也会及时进行更新~

希望对你有帮助~ 一起加油哇~

💖 1、二维数组中的查找

牛客网原题链接

题目描述

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

[

 [1,2,8,9],
 [2,4,9,12],
 [4,7,10,13],
 [6,8,11,15]

]

给定 target = 7,返回 true

给定 target = 3,返回 false

思路

从右上角度往左下角不断查找,

如果右上角值比 target 小,就往下走,值比 taget 大,就往右走,值相等的话,返回 true,依次类推…

如果到了左下角,还没有找到和 tatget 相等的值,就返回 false~

public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length==0 || array[0].length==0){
            return false;
        }
        int row = array.length; // 行
        int col = array[0].length; // 列
        int i = 0; // 行
        int j = col - 1; // 列
        while(i<row && j>=0){
            if(array[i][j] < target){
                i++;
            }else if(array[i][j] > target){
                j--;
            }else{
                return true;
            }
        }
        return false;
    }
}

💖 2、替换空格

牛客原题链接

题目描述

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

思路

新建一个 StringBuilder 动态字符串数组存放替换之后的字符串,

遍历 str , 如果 字符为空格,采用 StringBuilder 中的 append 方法在动态字符串数组中添加 %20 ,否则添加原字符

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	StringBuilder newStr = new StringBuilder();
        for(int i=0; i<str.length(); i++){
            char c = str.charAt(i);
            if(c == ' '){
                newStr.append("%20");
            }else{
                newStr.append(c);
            }
        }
        return newStr.toString();
    }
}

💖 3、从尾到头打印链表

牛客原题链接

题目描述

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)

思路一(反转函数)

新建一个 ArrayList ,遍历链表,从前往后保存每个节点的值到数组,

最后 反转函数reverse() 将数组反转

import java.util.*;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList();
        ListNode temp = listNode;
        while(temp != null){
            list.add(temp.val);
            temp = temp.next;
        }
        Collections.reverse(list); // 直接翻转链表
        return list;
    }
}

思路二(递归)

从表头开始往后递归进入每一个节点,遇到尾节点后开始返回,每次返回依次添加一个值进入输出数组,直到递归返回表头

import java.util.ArrayList;
public class Solution {
    //递归函数
    public void recursion(ListNode head, ArrayList<Integer> res){ 
        if(head != null){
            //先往链表深处遍历
            recursion(head.next, res); 
            //再填充到数组就是逆序
            res.add(head.val); 
        }
    }
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        //递归函数解决
        recursion(listNode, res);
        return res;
    }
}

思路二(栈)

顺序遍历链表,将链表的值push到栈中

然后再依次弹出栈中的元素,加入到数组中,即可实现链表逆序

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

http://www.niftyadmin.cn/n/176670.html

相关文章

快排,必拿下[java代码]

前导课划分成<P区和>P区以最后一个元素作为划分值---假设为P&#xff0c;将整个数组划分成[ 小于等于P的区域 大于P的区域]每个区域里无序。操作流程&#xff1a;从左往右遍历&#xff0c;有两个分支逻辑①若当前数<P,则当前数和小于等于区的下一数交换&#xff0c;小…

链表 链表之报数问题(循环链表)_46+链表之节点删除_47+链表删除练习_48

链表之报数问题 题目描述 有n个人围成一圈&#xff0c;顺序从1开始排号。从第1个人开始报数&#xff08;从1到3报数&#xff09;&#xff0c;凡报到3的人退出圈子&#xff0c;问最后留下的是原来第几号的那位。要求用循环链表实现。 输入格式 只有一个正整数n&#xff0c;保证…

FineReport模板设计器(帆软报表)之下载安装概述

目录一、下载及安装二、初识帆软1、简介2、索引2.1 前端 JavaScript 开发2.2 后台引擎相关开发2.3 插件开发2.4 使用 WebAPI 开发一、下载及安装 点击免费使用 选择使用的意图&#xff0c;进入到主界面点击下载即可&#xff0c;记得复制激活码&#xff01;&#xff01;&#x…

MyBatis小插曲\ lombok的坑:VO类继承父类打印不全的问题

模拟问题场景在我们 向前端传递参数的时候&#xff0c;经常会出现用到VO类的情况而VO这个扩展类&#xff0c;通常大部分的属性都和基类&#xff08;对应数据库的真正实体类&#xff09;有很多重复这时候我们就可以直接通过继承来进行实现。假如我们现在 有Article 和 User两个表…

idea远程debug服务器项目

1.配置idea远程debug 2.配置关键配置信息 ①调试名称&#xff08;随便起名&#xff09; ②远程机器IP ③调试开启的进程端口&#xff08;随便只要不被占用即可使用&#xff09; ④配置好①&#xff0c;②&#xff0c;③三个参数后生成的启动参数 ⑤选择模块就是服务器上打包的…

计算机专业来说是学习Python还是Java呢?

对于计算机专业的人来说&#xff0c;不应该着眼于选择哪门语言?你需要关注的是 如何进行编程。这是来自C之父Bjarne对这个问题的回答。曾经在一次讲座上&#xff0c;一位老师为问了Bjarne&#xff1a;我们应该教学生什么语言&#xff1f;Bjarne居然很耐心的回答了。Bjarne回答…

一文了解Jackson注解@JsonFormat及失效解决

背景 项目中使用WRITE_DATES_AS_TIMESTAMPS: true转换日期格式为时间戳未生效。如下&#xff1a; spring:jackson:time-zone: Asia/Shanghaiserialization:WRITE_DATES_AS_TIMESTAMPS: true尝试是否关于时间的注解是否会生效&#xff0c;使用JsonForma和JsonFiled均失效。 常…

【C++】特殊类的设计 + 单例模式

文章目录&#x1f4d6; 前言1. 特殊类的设计1.1 设计一个类&#xff0c;不能被拷贝&#xff1a;1.2 设计一个类&#xff0c;只能在堆上创建对象&#xff1a;&#x1f3c1;方法一&#xff1a;&#x1f3c1;方法二&#xff1a;1.3 设计一个类&#xff0c;只能在栈上面创建对象&am…