[学习报告]《LeetCode零基础指南》(第五讲) 指针(上)

简介: 第一题:1470. 重新排列数组 第二题:1929. 数组串联 第三题:1920. 基于排列构建数组 第四题:1480. 一维数组的动态和 第五题:剑指 Offer 58 - II. 左旋转字符串

第一题: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;
    }
}


image.png


第二题: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;
    }
}


微信图片_20220106112928.png


第三题: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;
    }
}


微信图片_20220106112951.png


第四题: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;
  }
}


微信图片_20220106113023.png


第五题:剑指 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();//转为字符串后返回
    }
}


微信图片_20220106113051.png

目录
相关文章
|
1月前
|
C语言
学习——理解指针(4)(指针学习最后一节)
学习——理解指针(4)(指针学习最后一节)
|
1月前
|
存储 C++
学习——理解指针(3)
学习——理解指针(3)
|
1月前
|
编译器
学习——理解指针(2)
学习——理解指针(2)
|
1月前
|
存储
学习——理解指针(1)
学习——理解指针(1)
|
3月前
|
Python
【Leetcode刷题Python】138. 复制带随机指针的链表
LeetCode上题目“138. 复制带随机指针的链表”的Python解决方案,包括两种方法:一种是在每个节点后复制一个新节点然后再分离出来形成新链表;另一种是构建一个字典来跟踪原始节点与其副本之间的映射关系,从而处理新链表的构建。
20 1
|
4月前
|
存储 安全 编译器
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)
|
5月前
|
算法
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表
|
5月前
|
算法 容器
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
【经典LeetCode算法题目专栏分类】【第1期】左右双指针系列:盛最多水的容器、接雨水、回文子串、三数之和
|
5月前
|
存储 SQL 算法
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II
LeetCode 题目 117:填充每个节点的下一个右侧节点指针 II