随心情刷Leetcode - 1

q165 比较版本号

/**
 * Compare two version numbers version1 and version2.
 * If version1 > version2 return 1; if version1 < version2 return -1;otherwise return 0.
 *
 * You may assume that the version strings are non-empty and contain only digits and the . character.
 *
 * The . character does not represent a decimal point and is used to separate number sequences.
 *
 * For instance, 2.5 is not "two and a half" or "half way to version three",
 * it is the fifth second-level revision of the second first-level revision.
 *
 * You may assume the default revision number for each level of a version number to be 0.
 * For example, version number 3.4 has a revision number of 3 and 4
 * for its first and second level revision number.
 * Its third and fourth level revision number are both 0.
 */
public class CompareVersionNum {

    public static void main(String[] args) {
        String test = "0001";
        //System.out.println(Integer.valueOf(test));
        String v1 = "0.1";
        String v2 = "1.1";
        System.out.println(compareVersion(v1, v2));
    }


    /**
     * 自己思路:
     * 两个字符串都使用'.'分开形成两个String字符串数组
     * 然后一组一组数字进行比较,如果其中一个长度不够长的话就用0进行比较
     * @param version1
     * @param version2
     * @return
     */
    public static int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        int len = Math.max(v1.length, v2.length);
        System.out.println(len);
        for (int i=0; i<len;i++){
            int v1Curr = v1.length>i ? Integer.valueOf(v1[i]):0;
            int v2Curr = v2.length>i ? Integer.valueOf(v2[i]):0;
            System.out.println("v1Curr: "+ v1Curr +" v2Curr: "+v2Curr);
            if (v1Curr<v2Curr){
                return -1;
            }else if (v1Curr>v2Curr){
                return 1;
            }

        }

        return 0;

    }
}

q315计算右侧比当前元素小的元素个数

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * You are given an integer array nums and you have to return a new counts array.
 * The counts array has the property where counts[i] is the number of smaller elements
 * to the right of nums[i].
 *
 * Example 1:
 * Input: nums = [5,2,6,1]
 * Output: [2,1,1,0]
 * Explanation:
 * To the right of 5 there are 2 smaller elements (2 and 1).
 * To the right of 2 there is only 1 smaller element (1).
 * To the right of 6 there is 1 smaller element (1).
 * To the right of 1 there is 0 smaller element.
 */
public class CountOfSmallerNumAfterSelf {

    /**
     * 最简单的做法: 暴力求解 时间复杂度 O(n^2)
     * @param nums
     * @return
     */
    public List<Integer> countSmaller(int[] nums) {
        List<Integer> res = new ArrayList<>();
        for (int i=0;i<nums.length-1;i++){
            int count = 0;
            int label = nums[i];
            for (int j=i+1;j<nums.length;j++){
                if (nums[j]<label){
                    count++;
                }
            }
            res.add(count);
        }
        res.add(0);
        return res;
    }

    /**
     * 使用binarySearch方式
     * 从后往前遍历 找到在有序的list之中新元素的位置 从而推导出来有多少个元素比它小
     * @param nums
     * @return
     */
    public List<Integer> countSmallerTwo(int[] nums){
        List<Integer> res = new ArrayList<>();
        List<Integer> sortedList = new ArrayList<>();

        if (nums == null || nums.length == 0){
            return res;
        }

        res.add(0);
        sortedList.add(nums[nums.length-1]);

        for (int i=nums.length-2; i>=0; i--){
            int index = Collections.binarySearch(sortedList, nums[i]);

            if (index >= 0){
                while (index>0 && sortedList.get(index-1) == nums[i]){
                    index--;
                }
            }else {
                index = -1-index;
            }

            res.add(0,index);
            sortedList.add(index, nums[i]);
        }

        return res;


    }
}

q341 扁平化嵌套列表迭代器

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;

/**
 * Given a nested list of integers, implement an iterator to flatten it.
 *
 * Each element is either an integer, or a list -- whose elements may also be integers or other lists.
 */
public class NestedIterator implements Iterator<Integer> {

    Stack<Integer> res;

    public NestedIterator(List<NestedInteger> nestedList){
        Stack<NestedInteger> stack = new Stack<>();
        add(nestedList,stack);
        res = new Stack<>();
        while (!stack.isEmpty()){
            res.add(stack.pop().getInteger());
        }
    }

    public void add(List<NestedInteger> nestedList, Stack<NestedInteger> stack){
        for (NestedInteger i:nestedList){
            if (i.isInteger()){
                stack.add(i);
            }else {
                add(i.getList(),stack);
            }
        }
    }


    @Override
    public boolean hasNext() {
        return !res.isEmpty();
    }

    @Override
    public Integer next() {
        if (hasNext()){
            return res.pop();
        }
        return null;
    }

    public class NestedInteger {

        // @return true if this NestedInteger holds a single integer, rather than a nested list.
        public boolean isInteger(){
            return false;
        }

        // @return the single integer that this NestedInteger holds, if it holds a single integer
        // Return null if this NestedInteger holds a nested list
        public Integer getInteger(){
            return 0;
        }

        // @return the nested list that this NestedInteger holds, if it holds a nested list
        // Return null if this NestedInteger holds a single integer
        public List<NestedInteger> getList(){
            return new ArrayList<>();
        }
    }
}

q394 字符串解码

import java.util.Stack;

/**
 * Given an encoded string, return its decoded string.
 *
 * The encoding rule is: k[encoded_string], 
 * where the encoded_string inside the square brackets is being repeated exactly k times. 
 * Note that k is guaranteed to be a positive integer.
 *
 * You may assume that the input string is always valid; 
 * No extra white spaces, square brackets are well-formed, etc.
 *
 * Furthermore, you may assume that the original data does not 
 * contain any digits and that digits are only for those repeat numbers, 
 * k. For example, there won't be input like 3a or 2[4].
 */
public class DecodeString {

    public static void main(String[] args) {
        String test = "3[a2[c]]";
        String test2 = "3[ab2[cd]]";
        String test3 = "100[leetcode]";
        System.out.println(decodeString(test3));
    }

    /**
     * 使用两个栈,一个存储频率,一个存储括号和字符,每个左括号对应一个频率
     * @param s
     * @return
     */
    public static String decodeString(String s) {
        Stack<Integer> frequency = new Stack<>();
        Stack<String> alphabet = new Stack<>();


        //temp存储的在遇到上一个括号之内遍历需要形成的String
        StringBuilder temp = new StringBuilder();
        StringBuilder currentStr = new StringBuilder();

        for (int i=0;i<s.length();i++){
            if (Character.isDigit(s.charAt(i))){
                int currNum = 0;
                while (Character.isDigit(s.charAt(i))){
                    currNum = currNum*10 + s.charAt(i)-'0';
                    i++;
                }
                i--;
                frequency.add(currNum);
            } else if (s.charAt(i)==']'){
                while (!alphabet.peek().equals("[")){
                    temp.append(alphabet.pop());
                }

                alphabet.pop();
                int currFrenquency = frequency.pop();

                for (int j=0;j<currFrenquency;j++){
                    currentStr.append(temp.toString());
                }

                alphabet.push(currentStr.toString());
                currentStr.setLength(0);
                temp.setLength(0);
            }else {
                alphabet.add(String.valueOf(s.charAt(i)));
            }
        }

        StringBuilder res = new StringBuilder();
        while (!alphabet.isEmpty()){
            res.append(alphabet.pop());
        }

        return res.reverse().toString();
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,837评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,551评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,417评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,448评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,524评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,554评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,569评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,316评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,766评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,077评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,240评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,912评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,560评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,176评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,425评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,114评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,114评论 2 352

推荐阅读更多精彩内容

  • 按出题热度排序: 题号题目通过率难度#972相等的有理数40.90%困难#631设计Excel求和公式26.30%...
    婉妃阅读 3,102评论 0 1
  • 1.数组和字符串 “题目怎么说,你就怎么做”,这类题目一般不涉及高深的算法,着重考查的是代码能力和思维。 当然,有...
    梦想是教小朋友算法阅读 940评论 0 1
  • 第1期 中国风墨迹笔刷 第2期 UI设计师大礼包 第3期12款怀旧字体 第4期青春文艺范排版 第5期创意几何立体构...
    最新最全设计素材阅读 1,832评论 0 2
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,518评论 16 22
  • 创业是很多人的梦想,多少人为了理想和不甘选择了创业来实现自我价值,我就是其中一个。 创业后,我由女人变成了超人,什...
    亦宝宝阅读 1,805评论 4 1