day03(11.1)——leetcode面试经典150

哈哈哈哈,漏了一天,安阳这个城市还是很恐怖的,昨天出去玩忘记带口罩了,回来的是时候骑车回来,结果应该是吸多了雾霾,头巨晕,就写不动了,所以今天写两题。

135. 分发糖果

135. 分发糖果

题目:

我打开这个题目的时候看到是困难,想着挑战一下,结果对于我这个小白菜来说真是挺困难,但好在最后还是写出来了!!!

但我的纯纯就是笨办法

题解:

我先讲解一下我的思路:我想的是先把他们起始糖果数设成0,但是起始总糖果数是加上了起始糖果数至少为1,所以起始糖果数是ratings.length,然后我再进行判断每一个糖果的相邻结点。

如果左边节点存在,那么当左边节点的评分比当前节点更低,并且左边节点的糖果数大于等于当前节点,当前节点的糖果数必须比左边节点糖果数大,所以flag[i]设置成flag[i-1]+1;

如果右边节点也存在,那么当右边节点的评分比当前节点更低,并且右边结点的糖果数大于等于当前结点,当前节点的糖果数必须比右边结点糖果数大,所以将flag[i]设置成flag[i+1]+1;

但是从左边遍历一遍是可能会有问题的,比如下面这个例子:

1 2 87 87 87 2 1,会有问题,所以需要从右向左再遍历一遍。

java 复制代码
class Solution {
    public int candy(int[] ratings) {
        int[] flag =  new int[ratings.length];
        int candy = ratings.length;
        for(int i=0;i<ratings.length;i++) {
            if(i-1 >= 0 && ratings[i] > ratings[i-1]  && flag[i] <= flag [i-1] ) {
                flag[i] = flag[i-1]+1;
            }
            else if(i+1 <= ratings.length-1 && ratings[i] > ratings[i+1] && flag[i] <= flag [i+1] ) {
                flag[i] = flag[i+1]+1;
            }
        }
        for(int i=ratings.length-1;i>=0;i--) {
            if(i-1 >= 0 && ratings[i] > ratings[i-1]  && flag[i] <= flag [i-1] ) {
                flag[i] = flag[i-1]+1;
            }
            else if(i+1 <= ratings.length-1 && ratings[i] > ratings[i+1] && flag[i] <= flag [i+1] ) {
                flag[i] = flag[i+1]+1;
            }
            candy += flag[i];
        }
        return candy;
    }
}

13. 罗马数字转整数

13. 罗马数字转整数

题目:

题解:

这道题我就是采用if else的判断方法,要记得字符串访问字符的方式是通过s.chatAt(i),不是通过[i]的方式,c++有点写习惯了哈哈哈

java 复制代码
class Solution {
    public int romanToInt(String s) {
        int sum=0;
        for(int i=0;i<s.length();i++) {
            if(i+1<s.length()) {
                if(s.charAt(i)=='I'&&s.charAt(i+1)=='V') {
                    sum+=4;
                    i+=1;
                    continue;
                }
                else if(s.charAt(i)=='I'&&s.charAt(i+1)=='X') {
                    sum+=9;
                    i+=1;
                    continue;
                }
                else if(s.charAt(i)=='X'&&s.charAt(i+1)=='L') {
                    sum+=40;
                    i+=1;
                    continue;
                }
                else if(s.charAt(i)=='X'&&s.charAt(i+1)=='C') {
                    sum+=90;
                    i+=1;
                    continue;
                }
                else if(s.charAt(i)=='C'&&s.charAt(i+1)=='D') {
                    sum+=400;
                    i+=1;
                    continue;
                }
                else if(s.charAt(i)=='C'&&s.charAt(i+1)=='M') {
                    sum+=900;
                    i+=1;
                    continue;
                }
            }
            if(s.charAt(i) == 'I') {
                sum+=1;
            }
            else if(s.charAt(i) == 'V') {
                sum+=5;
            }
            else if(s.charAt(i) == 'X') {
                sum+=10;
            }
            else if(s.charAt(i) == 'L') {
                sum+=50;
            }
            else if(s.charAt(i) == 'C') {
                sum+=100;
            }
            else if(s.charAt(i) == 'D') {
                sum+=500;                
            }
            else if(s.charAt(i) == 'M') {
                sum+=1000;
            }
        }
        return sum;
    }
}
相关推荐
凤山老林1 小时前
04-Java JDK, JRE和JVM
java·开发语言·jvm
灵感__idea7 小时前
Hello 算法:贪心的世界
前端·javascript·算法
camellias_8 小时前
【无标题】
java·tomcat
咸鱼2.08 小时前
【java入门到放弃】需要背诵
java·开发语言
澈2078 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
椰猫子8 小时前
Java:异常(exception)
java·开发语言
ambition202428 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_8 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi8 小时前
前缀和差分
算法·图论
代码旅人ing9 小时前
链表算法刷题指南
数据结构·算法·链表