IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> [学习报告]《LeetCode零基础指南》(第五讲) 指针 -> 正文阅读

[数据结构与算法][学习报告]《LeetCode零基础指南》(第五讲) 指针

目录

第一题:1470. 重新排列数组

?第二题:1929. 数组串联

?第三题:1920. 基于排列构建数组

?第四题:1480. 一维数组的动态和

?第五题:剑指 Offer 58 - II. 左旋转字符串

?第六题:1108. IP 地址无效化

?第七题:剑指 Offer 05. 替换空格

?字符串替换总结:

第八题:1365. 有多少小于当前数字的数字

?第九题:剑指 Offer 17. 打印从1到最大的n位数

?第十题:1389. 按既定顺序创建目标数组


第一题:1470. 重新排列数组

class Solution {
    public int[] shuffle(int[] nums, int n) {
        //只需两个数的步长为n就在一起,在新的数组,因为一次加了两个元素,
        //所以每一次下来都得加2
          int arr[]=new int[2*n];
          for(int i=0,j=0;i<n;i++,j+=2){
             arr[j]=nums[i];
             arr[j+1]=nums[i+n];
          }
          return arr;
    }
}

?第二题:1929. 数组串联

class Solution {
    public int[] getConcatenation(int[] nums) {
        //在n和2n分别弄两个索引进行拷贝就可以了
        int n=nums.length;
         int arr[]=new int [2*n];
         int j=0;
         for(int i=0;i<2*n;i++){
             if(i<n){
                 arr[i]=nums[i];
             }else{
                 arr[i]=nums[j];
                 j++;
             }
         }
         return arr;
    }
}

?第三题:1920. 基于排列构建数组

这题按照题目的意思就可以了

class Solution {
    public int[] buildArray(int[] nums) {
        int n= nums.length;
        int []arr=new int[n];
        for(int i=0;i<n;i++){
            arr[i]=nums[nums[i]];
        }
        return arr;
    }
}

?第四题:1480. 一维数组的动态和

第一想法就是创建一个方法实现前几项的和。

class Solution {
    public int[] runningSum(int[] nums) {
             int count=0;
             int n=nums.length;
                int arr[]=new int[n];
             for(int i=0;i<nums.length;i++){
                  count=soul(nums,i+1);
                  arr[i]=count;
             }   
             return arr; 
    }
  public static int soul(int nums[],int n){
      int sum=0;
        for(int i=0;i<n;i++){
             sum+=nums[i];
        }
         return sum;
  }
}

?第五题:剑指 Offer 58 - II. 左旋转字符串

这题参考了一下评论区的想法

class Solution {
    public String reverseLeftWords(String s, int n) {
            StringBuilder sb=new StringBuilder();
            for(int i=n;i<s.length();i++){
                  sb.append(s.charAt(i));//从n开始得到每个字符
            }
            for(int i=0;i<n;i++){
                sb.append(s.charAt(i));//将第一个到n依次加到之前的后面
            }
            return sb.toString();//转为字符串后返回
    }
}

?第六题:1108. IP 地址无效化

class Solution {
    public String defangIPaddr(String address) {
        StringBuilder sb=new StringBuilder();
        for(int i=0;i<address.length();i++){
            if(address.charAt(i) == '.'){//当等于'.'时不加进去,而加"[.]"这样就完成了替换
                sb.append("[.]");
                continue;
            }
            sb.append(address.charAt(i));
        }
        return sb.toString();
    }
}

?第七题:剑指 Offer 05. 替换空格

class Solution {
    public String replaceSpace(String s) {
         StringBuilder sb=new StringBuilder();
         for(int i=0;i<s.length();i++){
             if(s.charAt(i)==' '){
                 sb.append("%20");
                 continue;
             }
             sb.append(s.charAt(i));
         }
         return sb.toString();
    }
}

?

?字符串替换总结:

?这种字符串替换的问题,其实一个思路,先创建StringBuilder类,在一个for循环中通过

s.charAt(i)得到s字符串中的每个字符,在通过比对要换的字符,比对成就加入替换的字符

在通过此次字符暂停(continue)StingBuilder对象.append(s.charAt(i))即可.最后通过

toSting()返回即可.

第八题:1365. 有多少小于当前数字的数字

第一想法的老方法

class Solution {
    public int[] smallerNumbersThanCurrent(int[] nums) {
             int count=0;
             int n=nums.length;
                int arr[]=new int[n];
             for(int i=0;i<n;i++){
                  count=soul(nums,i);
                  arr[i]=count;
             }   
             return arr; 
    }
  public static int soul(int nums[],int n){
      int sum=0;
        for(int i=0;i<nums.length;i++){
            if(n!=i){
                if(nums[n]>nums[i]){
                    sum++;
                }
            }
        }
         return sum;
  }
}

?第九题:剑指 Offer 17. 打印从1到最大的n位数

class Solution {
    public int[] printNumbers(int n) {
        int number=1;
        //几个n就弄到几位数
        for(int i=0;i<n;i++){
            number*=10;
        } 
        //由题可知申请number-1即可
         int []arr=new  int[number-1];
       for(int i=0,j=1;i<number-1;i++,j++){
           arr[i]=j;
       }
       return arr;
    }
}

?第十题:1389. 按既定顺序创建目标数组

class Solution {
    public int[] createTargetArray(int[] nums, int[] index) {
        //创建一个集合
        ArrayList<Integer> array = new ArrayList();
        for(int i=0; i<nums.length; i++) {
            //通过集合的add方法对指定索引进行插入
            array.add(index[i],nums[i]);
        }
        int[] target = new int[array.size()];
        //遍历集合将集合中的元素插入
        for(int i=0; i<target.length; i++) {
            target[i] = array.get(i);
        }
        return target;
    }
}

这个参考了评论区的想法,非常的巧妙,利用add带索引的插入方法,在通过遍历加入所有

元素,确实挺好的。?

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-27 10:09:32  更:2021-11-27 10:09:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 15:23:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码