关闭

LeetCode - 208. Implement Trie (Prefix Tree)

https://leetcode.com/articles/implement-trie-prefix-tree/ 知识点: 1. 新的数据结构,非常有用,记一下...
阅读(208) 评论(0)

LeetCode - 299. Bulls and Cows

我们可以使用一个HashMap来记录character和其出现的次数,如果secret.charAt(i) == guess.charAt(i),那么bull++;如果secret.charAt(i) != guess.charAt(i)的时候,secret扫过数字,相应的count加一,guess扫过数字,相应的count减一。 若是mark[secret.charAt(i) - '0'] 小...
阅读(165) 评论(0)

LeetCode - 328. Odd Even Linked List

这道题目的思路同样也比较巧妙,在这道题目的解法中,我们并不是一个一个地去移动node,而是分别将odd nodes和even nodes串成两个Linked List,然后再将odd list尾部的next结点指向even nodes结点的头部即可,图片分析如下: 代码如下: /** * Definition for singly-linked list. * public cla...
阅读(181) 评论(0)

LeetCode - 304. Range Sum Query 2D - Immutable

前面已经做过一道Range Sum Query - Immutable的题目,当时我们采用的方法是新建一个数组存储nums中从0到当前index的元素的和,这样在sumRange方法中我们可以在O(1)的时间中得到结果,在题目要求的sumRange多次调用的情况下非常方便。 这里我们同样想要采用相似的方法,于是我们需要另外新建一个二维数组来存储和而不是单个的元素,2D情况下的sumRange分析...
阅读(341) 评论(0)

LeetCode - 225. Implement Stack Using Queues

题目要求使用Queue来实现Stack,我们都知道Queue是FIFO,而Stack是FILO,为了解决这个问题,我们只要在add元素进Queue的时候把之前加进去的元素都poll出来然后再重新add进Queue即可,这样就是实现了FILO的操作。具体的函数实现见下面: 整体的代码如下: class MyStack { Queue queue; public ...
阅读(430) 评论(0)

LeetCode - 292. Nim Game

这道题目只要仔细思考分析问题的规律,就可以发现解题的方法: 代码如下: public class Solution{ public boolean canWinNim(int n){ return n % 4 != 0; } }...
阅读(301) 评论(0)

LeetCode - 150. Evaluate Reverse Polish Notation

我们都知道计算逆波兰表达式需要使用Stack,所以这道题目要使用一个Stack数据结构:我们把遇到的数字push进stack里面,而每次遇到四种运算符号的时候,我们就把相应的运算数pop出stack,而在计算之后再将结果push进stack。最后stack中剩下的就是整个运算的结果,pop出即可,代码如下: public class Solution { public int evalR...
阅读(157) 评论(0)

LeetCode - 147. Insertion Sort List

Insertion Sort的思想是逐步将后面的元素插入到前面相应的位置中来,知道了Insertion Sort的这个思想,我们可以将这种方法用到Linked List上面。另外,由于Linked List的头部或许发生改变,所以我们需要使用dummyNode。 总的来说,在这道题目中,我们使用了三个指针,prev,curr和next。其中curr指向我们要插入到前面的元素,prev和prev....
阅读(348) 评论(0)

LeetCode - 151. Reverse Words in a String

第一种方法是使用Java的内置方法,非常巧妙,代码如下: public class Solution { public String reverseWords(String s) { if(s == null || s.length() == 0) return s; String[] words = s.trim().split(" +...
阅读(168) 评论(0)

LeetCode - 143. Reorder List

这道题目总的来说可以分三步,第一步是找到Linked List的中点,第二部是翻转Linked List的后半部分,第三部就是把Linked List按照题目的要求进行reorder,现在大的思路已经明确,接下来我们所需要的就是思考这三步怎样实现。 1->2->3->4->5->6 首先第一步的话,我们可以使用slow runner/fast runner来实现。对于第二步来说,假设题目中的L...
阅读(243) 评论(0)

LeetCode - 303. Range Sum Query - Immutable

这道题目让实现一个方法计算数组中两个index之间的数字的和,看似非常简单,只要把之间所有的数字加起来即可。但是题目中给出的一个note是这个方法会调用很多次,所以我们希望找到一种在时间复杂度上更加有效的方法。 我们可以另外申请一个数组,数组从index为1开始,都是num[i] + nums[i - 1],这样这个新的数组index为i的元素都是nums数组中从0到i的数字的和。所以在实现新的...
阅读(179) 评论(0)

LeetCode - 284. Peeking Iterator

在已有的类的基础上实现功能更为强大的一个子类,这时我们可以把父类作为子类的一个attribute,通过这个attribute来使用父类的一些methods(对于这道题目是implements interface)。 既然这道题目要求实现的方法都与下一个有关,我们可以使用一个指针指向下一个需要返回的元素。对于constructor,我们只要对类里的变量进行初始化,将next指针指向下一个需要返回的...
阅读(119) 评论(0)

LeetCode - 134. Gas Station

首先我们经过思考可以发现这道题目有两个性质: 1. 如果从A点没有办法到达B点,那么从A和B之间的任何点出发都无法到达B点 2. 如果circle中总的gas大于总的cost,那么一定会存在一个解 根据以上的思路,我们可以写程序。首先假设从index为0的地方开始出发,在每一次模拟走向下一个结点的时候都计算sumGas和sumCost,并且计算当前的gas能否足以支撑到达下一个结点,计算方法...
阅读(96) 评论(0)

LeetCode - 160. Intersection of Two Linked Lists

代码如下: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */...
阅读(179) 评论(0)

LeetCode - 162. Find Peak Element

题目中给出了一个很重要的假设,就是数组左侧左边和右侧右边的数都是负无穷大,所以我们可以采用一个很方便的算法进行计算。 我们从index为1的时候开始扫描整个数组,比较nums[i]和nums[i - 1]的大小,如果nums[i]比较小的话,那么nums[i - 1]就是peak element,直接返回i - 1即可,因为题目中假设数组左侧的左边是负无穷大,所以如果nums[1] < nums...
阅读(116) 评论(0)
148条 共10页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:24101次
    • 积分:1643
    • 等级:
    • 排名:千里之外
    • 原创:148篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档