力扣智慧思想小题,目录力扣.跳跃游戏(思想很重要)力扣.跳跃游戏II(还是思想)力扣.分发糖果力扣151.反转字符串中的单词力扣.轮转数组
目录
力扣.跳跃游戏(思想很重要)
力扣.跳跃游戏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%nint 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];}}
}