classSolution{publicintcanCompleteCircuit(int[] gas,int[] cost){//all表示跑完一圈剩下的油,start为出发的站点,nowall为到目前为止剩下的油,cos为从当前加油站加了油减去到达下一个加油站需要的油int all =0, start =0, nowall =0, cos =0;//如果跑完一圈还有油,则有答案for(int i =0; i < gas.length; i ++){
all += gas[i];
all -= cost[i];}//遍历每一站找出出发点for(int i =0; i < gas.length; i ++){
cos = gas[i]- cost[i];
nowall += cos;//如果目前剩下的油小于零,则重置出发站为下一站点if(nowall <0){
start = i +1;
nowall =0;}}if(all >=0)return start;elsereturn-1;}}
135.分发糖果
classSolution{publicintcandy(int[] ratings){//left记录从左到右遍历数组,如果右边比左边大,那个人得到的糖果就多一个//right记录从右到左遍历数组,如果左边比右边大,那个人得到的糖果就多一个int[] left =newint[ratings.length];int[] right =newint[ratings.length];//初始化数组,每个人都先只有一个糖果for(int i =0; i < ratings.length; i ++){
left[i]=1;
right[i]=1;}for(int i =1; i < ratings.length; i ++){if(ratings[i]> ratings[i-1])
left[i]= left[i-1]+1;}for(int i = ratings.length-2; i >=0; i --){if(ratings[i]> ratings[i +1])
right[i]= right[i +1]+1;}int count =0;//统计总共需要多少个糖果for(int i =0; i < ratings.length; i ++){
count += Math.max(left[i], right[i]);}return count;}}
316. 去除重复字母
classSolution{public String removeDuplicateLetters(String s){
Stack<Character> stack=newStack<>();//遍历每一个元素for(int i =0; i < s.length(); i++){
Character c = s.charAt(i);//stack.contains(Object)判断某元素是否在stack中,在则返回trueif(stack.contains(c))continue;//如果栈顶元素大于当前元素,并且栈顶元素在字符串中还重复出现过,那么栈顶元素出栈,等待下一次入栈while(!stack.isEmpty()&& stack.peek()> c && s.indexOf(stack.peek(), i)!=-1)
stack.pop();
stack.push(c);}//将栈中元素出栈形成字符串char[] chars=newchar[stack.size()];for(int i = stack.size()-1; i >=0; i --){
chars[i]= stack.pop();}
String ans =newString(chars);return ans;}}