力扣智慧思想小题,目录力扣.跳跃游戏(思想很重要)力扣.跳跃游戏II(还是思想)力扣.分发糖果力扣151.反转字符串中的单词力扣.轮转数组

发布于:2025-05-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

力扣.跳跃游戏(思想很重要)

力扣.跳跃游戏II(还是思想)

力扣.分发糖果

力扣151.反转字符串中的单词

力扣.轮转数组


字符

a=97

A=65;

JRE:Java运行时候的环境

JDK: JAVA开发套件(工具包)

java原本是.java文件,编译成.class字节码文件

八种基本数据类型:byte,int,,short,long(后面加L或者l),     一个字节=8bit

布尔:boolean

字符:char

小数:float(后面加f或者F),double(浮点数默认 后面加d或者D)

(n=1.2E2(科学计数法,1.2乘10的2次幂)

对于数据精度要求高的 BigDecimal(处理)

力扣.跳跃游戏(思想很重要)

我开始再想,什么方法好,要是暴力遍历,来好几轮,或许可以,但是一定违背这道题的初衷,这个题的思想,是我看看我最远能跳多远,我记录当前这个最远位置,因为假如最远的位置到不了,别的位置也到不了,那么假如最远那个位置之后是0,咋办,其实假如最远的是0,那么就说明0之前的数字,没有能比0更远的,因为在当前位置和0之间还有位置,假如这些位置比0还远,那么就会更新位置,假如没有比0还远,那么就说明到不了0这个位置,换就话,0的前面可能是一堆0,或者到达还是0的位置。

class Solution {
    public boolean canJump(int[] nums) {
        int n=nums.length;
        int maxRight=0;
        for(int i=0;i<n;i++){
         if(i<=maxRight){
             maxRight=Math.max(maxRight,i+nums[i]);
             if(maxRight>=n-1)return true;
         }
        }
        return false;
    }
}

力扣.跳跃游戏II(还是思想)

class Solution {
    public int jump(int[] nums) {
        int n = nums.length;
        int end = 0;
        int maxPosition = 0; 
        int steps = 0;
        for (int i = 0; i < n - 1; i++) {
            //不断更新最远位置之后,
            maxPosition = Math.max(maxPosition, i + nums[i]);     
            //他的这个end相当于是找到当前位置能到达的最大值,然后,i还是正常走里面,并非一次性跳跃到end,等到i到达end的时候,就步伐++,因为假如这个最大值里面存在一个地方,能够到达更远的地方,那么他的最大位置就会改变,然后当i到达end,相当于咋我都要走这一步,下一步到达的地点是maxPosition,等到达了end,我步骤++,然后到那个最大位置,因为我的最大位置是肯定大于end的,所以我们进行一个更新
            if (i == end) {
                end = maxPosition;
                steps++;
            }
        }
        return steps;
    }
}

力扣.分发糖果

相邻评分更高,就说明左边也要看,右边也要看,看看是否比自己大

class Solution {
    public static int candy(int[] ratings) {
        int n=ratings.length;
        int []maxR=new int[n];
        int []maxL=new int[n];

        //1  1   2   2   3      4
        //[1,  2,  87  ,87  ,87,  2,  1]

        for(int i=n-1;i>=0;i--){
            if(i<n-1&&ratings[i]>ratings[i+1]){
                maxR[i]=maxR[i+1]+1;
            }else{
                maxR[i]=1;
            }
        }
        for(int i=0;i<n;i++){
            if(i>0&&ratings[i]>ratings[i-1]){
                maxL[i]=maxL[i-1]+1;
            }else{
                maxL[i]=1;
            }
        }
        int max=0;
        for(int i=0;i<n;i++){
            max+=Math.max(maxL[i],maxR[i]);
        }
        return max;
    }
    }

力扣151.反转字符串中的单词

倒着,就拿栈直接操作

class Solution {
        public static String reverseWords(String s) {
    String[]ss=s.split(" ");
    StringBuffer sb=new StringBuffer();
    int n=ss.length;
    Stack<String>stack=new Stack<>();
    for(int i=0;i<n;i++){
            if(!ss[i].equals("")){
                stack.add(ss[i]);
            }
        }

    while(!stack.isEmpty()){
        if(stack.size()!=1){
        sb.append(stack.pop()+" ");}
        else  if (stack.size()==1){
            sb.append(stack.pop());
        }

    }
    return  sb.toString();
    }
}

力扣.轮转数组

想着去交换来着,但是没必要,不如牺牲点时间,我去把值传递给他们。

class Solution {
     public static void rotate(int[] nums, int k) {
            //    i+k%n
            int n=nums.length;
            int []b=new int[n];
            int ret=0;
            int i=0;
            while(ret<n) {
                int t=nums[i];
                b[(i+k)%n]=t;
                i++;
                ret++;
            }
            i=0;
            for(;i<n;i++){
                nums[i]=b[i];
            }
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到