<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[若砚的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/juttajry</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; juttajry]]></copyright><item><title><![CDATA[【LeetCode146】LRU缓存]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/124525854</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/124525854</guid><author>juttajry</author><pubDate>Sun, 01 May 2022 13:30:36 +0800</pubDate><description><![CDATA[思路及启发
思路：HashMap + 双向链表
双向链表可以在O(1)的时间复杂度内，得到最近访问过的节点，和最久访问过的节点。
如果使用单链表的话，只可能在一个方向达到O(1)的时间复杂度。
【版本1】
class DNode
{
	int key;
	int val;
	DNode pre;
	DNode next;
	
	public DNode()
	{
		
	}
	public DNode(int k, int v)
	{
		key = k;
		val = v;
	}
	
	public D]]></description><category></category></item><item><title><![CDATA[【LeetCode 128】最长连续序列]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/124236449</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/124236449</guid><author>juttajry</author><pubDate>Sun, 17 Apr 2022 21:04:14 +0800</pubDate><description><![CDATA[public int longestConsecutive(int[] nums) {
        int ret = 0;
        int n = nums.length;
        Map&lt;Integer, Integer&gt; map = new HashMap&lt;Integer, Integer&gt;();
        for (int i = 0; i &lt; n; i++)
            map.put(nums[i], i);
     ...]]></description><category></category></item><item><title><![CDATA[【LeetCode 819】最常见的单词]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/124232277</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/124232277</guid><author>juttajry</author><pubDate>Sun, 17 Apr 2022 16:58:01 +0800</pubDate><description><![CDATA[思路
难点1：如何将非空格、非字母区分出来→全部替换为空格，利用正则表达式
难点2：如何找到出现次数最多，且不在banned中→先找到不在set中的单词，然后再判断其出现的次数是否是最多的
	public static String mostCommonWord(String paragraph, String[] banned) {
		Set&lt;String&gt; set = new HashSet&lt;String&gt;();
		Map&lt;String, Integer&gt; map]]></description><category></category></item><item><title><![CDATA[【华为软件实习机考真题】热词选择]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/124020519</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/124020519</guid><author>juttajry</author><pubDate>Thu, 07 Apr 2022 17:11:40 +0800</pubDate><description><![CDATA[写在前面
满分600分，题目分为100，200，300分，该题目是100分题；
没有现场AC，后续花了2个小时完成，涉及到很多东西还不是特别熟悉。
题目描述
给出多篇文章，根据下列标准选择出topN个热词。
标准1：出现次数越多，权值越大，排名越靠前；出现在题目中权值+3，出现在文本中权值+1；
标准2：权值相同的词，出现在题目中，排名优先于出现在文本中；
标准3：权值相同且均出现在题目或者文本中，出现越早，排名越靠前。
下面给出M篇文章，每一篇文章题目占一行，文本占一行，即一篇文章2*M行，输出前topN]]></description><category></category></item><item><title><![CDATA[【LeetCode 560】和为 K 的子数组]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123989660</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123989660</guid><author>juttajry</author><pubDate>Wed, 06 Apr 2022 14:45:05 +0800</pubDate><description><![CDATA[思路
前缀和
    public static int subarraySum(int[] nums, int k) {
    	int ret = 0;
    	Map&lt;Integer, Integer&gt; map = new HashMap&lt;Integer, Integer&gt;(); // 和 : 出现次数
    	int sum = 0;
    	map.put(0, 1);
    	for (int i = 0; i &lt; nums.length; i++)
  ]]></description><category></category></item><item><title><![CDATA[【LeetCode 310】最小高度树]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123985250</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123985250</guid><author>juttajry</author><pubDate>Wed, 06 Apr 2022 11:08:22 +0800</pubDate><description><![CDATA[思路
深度优先搜索
LeetCode没有全部AC，卡在了第53个测试用例，原因是超时。
	public static List&lt;Integer&gt; findMinHeightTrees(int n, int[][] edges) {
    	int[][] tree = graph(n, edges);
    	Map&lt;Integer, List&lt;Integer&gt;&gt; deepList = new HashMap&lt;Integer, List&lt;Integer&g]]></description><category></category></item><item><title><![CDATA[【LeetCode 1004】最大连续1的个数 III]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123973864</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123973864</guid><author>juttajry</author><pubDate>Tue, 05 Apr 2022 18:34:43 +0800</pubDate><description><![CDATA[思路
滑动窗口，一次通过！
    public int longestOnes(int[] nums, int k) {
    	int maxL = 0;
    	int start = 0;
    	int end = 0;
    	int cnt = 0;
    	while (end &lt; nums.length)
    	{
    		if (nums[end] == 0)
    			cnt++;
    		while (cnt &gt; k)
    		{
    	]]></description><category></category></item><item><title><![CDATA[【LeetCode 200】岛屿数量]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123970213</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123970213</guid><author>juttajry</author><pubDate>Tue, 05 Apr 2022 15:52:55 +0800</pubDate><description><![CDATA[思路
深度优先搜索（一次做出来的！）
    public static int numIslands(char[][] grid) {
        int ret = 0;
        // grid是一个m行n列的矩阵
    	int m = grid.length;
    	int n = grid[0].length;
    	boolean[][] visited = new boolean[m][n];
    	int[] directions = {-1, 0, 1};
   ]]></description><category></category></item><item><title><![CDATA[【LeetCode 547】省份数量]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123967940</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123967940</guid><author>juttajry</author><pubDate>Tue, 05 Apr 2022 14:23:37 +0800</pubDate><description><![CDATA[思路1
深度优先搜索
    public int findCircleNum1(int[][] isConnected) {
        int provinces = isConnected.length;
        boolean[] visited = new boolean[provinces];
        int circles = 0;
        for (int i = 0; i &lt; provinces; i++) {
            if (!visit]]></description><category></category></item><item><title><![CDATA[【LeetCode 204】计数质数]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123967106</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123967106</guid><author>juttajry</author><pubDate>Tue, 05 Apr 2022 12:03:10 +0800</pubDate><description><![CDATA[思路
参考题解中的埃氏筛方法。
    public int countPrimes(int n) {
        int[] isPrime = new int[n]; // 最多是n个质数
        Arrays.fill(isPrime, 1);
        int ans = 0;
        for (int i = 2; i &lt; n; ++i) {
            if (isPrime[i] == 1) { // 1表示是质数
                a]]></description><category></category></item><item><title><![CDATA[【LeetCode 191】二进制位1的个数]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123966294</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123966294</guid><author>juttajry</author><pubDate>Tue, 05 Apr 2022 11:12:29 +0800</pubDate><description><![CDATA[public int hammingWeight(int n) {
        int cnt = 0;
// 方法1: 从低到高依次判断n的二进制的每一位是否为1
        while (n != 0)
        {
            cnt += (n &amp; 1);
            n &gt;&gt;= 1;
        }
// 方法2: 从低到高依次将n的二进制的每一位上从1变成0         
        while (n != 0)
  ...]]></description><category></category></item><item><title><![CDATA[【LeetCode 100】相同的树]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123873041</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123873041</guid><author>juttajry</author><pubDate>Thu, 31 Mar 2022 15:16:55 +0800</pubDate><description><![CDATA[深度优先搜索
	public boolean isSameTree(TreeNode p, TreeNode q) {
    	if (p == null &amp;&amp; q == null)
    		return true;
    	if (p == null || q == null)
    		return false;
    	if (p.val != q.val)
    		return false;
    	return isSameTree(p.left, q.left)]]></description><category></category></item><item><title><![CDATA[【LeetCode 94】二叉树的中序遍历]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123869431</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123869431</guid><author>juttajry</author><pubDate>Thu, 31 Mar 2022 13:14:39 +0800</pubDate><description><![CDATA[迭代
	public static List&lt;Integer&gt; inorderTraversal(TreeNode root)
	{
		List&lt;Integer&gt; list = new ArrayList&lt;Integer&gt;();
		Deque&lt;TreeNode&gt; stk = new LinkedList&lt;TreeNode&gt;();
		TreeNode t = root; 
		stk.push(new TreeNode());         ]]></description><category></category></item><item><title><![CDATA[Java Scanner中的next(), nextLine(), nextInt()]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123854563</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123854563</guid><author>juttajry</author><pubDate>Wed, 30 Mar 2022 20:13:54 +0800</pubDate><description><![CDATA[JavaScanner中的next()
Finds and returns the next complete token from this scanner. A complete token is preceded and followed by input that matches the delimiter pattern.
【注1】这里的delimiter pattern默认是正则表达式：\p{javaWhitespace}+，表示匹配任何空白字符，因此next()读取的内容默认去掉前后的空白符号]]></description><category></category></item><item><title><![CDATA[【LeetCode 583】两个字符串的删除操作]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123820414</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123820414</guid><author>juttajry</author><pubDate>Tue, 29 Mar 2022 14:30:16 +0800</pubDate><description><![CDATA[字符串，动态规划]]></description><category></category></item><item><title><![CDATA[【LeetCode 718】最长重复子数组]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123807778</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123807778</guid><author>juttajry</author><pubDate>Mon, 28 Mar 2022 22:22:26 +0800</pubDate><description><![CDATA[字符串，动态规划]]></description><category></category></item><item><title><![CDATA[【LeetCode 658】找到 K 个最接近的元素]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123356919</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123356919</guid><author>juttajry</author><pubDate>Tue, 08 Mar 2022 16:27:55 +0800</pubDate><description><![CDATA[参考题解，使用双指针，由于数组本身是有序的，最后的答案也需要有序，因此从数组的头和尾一起收缩，最后的区间长度为k。
    public static List&lt;Integer&gt; findClosestElements2(int[] arr, int k, int x) {
            int size = arr.length;

            int left = 0;
            int right = size - 1;

            int]]></description><category></category></item><item><title><![CDATA[【LeetCode 611】有效三角形的个数]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123164711</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123164711</guid><author>juttajry</author><pubDate>Sun, 27 Feb 2022 15:56:37 +0800</pubDate><description><![CDATA[public static int triangleNumber(int[] nums) {
    	int ret = 0;
    	Arrays.sort(nums);
    	int n = nums.length;
    	for (int i = 0; i &lt; n-1; i++)
    		for (int j = i + 1; j &lt; n; j++)
    		{
    			// range (nums[j] - nums[i], nums[i] + nums[j])]]></description><category></category></item><item><title><![CDATA[【LeetCode 275】H 指数 II]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/123134549</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/123134549</guid><author>juttajry</author><pubDate>Fri, 25 Feb 2022 15:42:17 +0800</pubDate><description><![CDATA[public static int hIndex(int[] citations) {
    	int n = citations.length;
    	if (citations[n - 1] == 0)
    		return 0;
    	int l = 0;
    	int r = n - 1;
    	while (l &lt; r)
    	{   // find the citations[mid] &lt;= n - mid
    		int mid = l + (...]]></description><category></category></item><item><title><![CDATA[【LeetCode 69】x 的平方根]]></title><link>https://blog.youkuaiyun.com/juttajry/article/details/122941849</link><guid>https://blog.youkuaiyun.com/juttajry/article/details/122941849</guid><author>juttajry</author><pubDate>Tue, 15 Feb 2022 12:23:22 +0800</pubDate><description><![CDATA[思路：二分查找算法
参考题解，这里mid的取法值得注意。
    public static int mySqrt(int x) {
        int left = 0;
        int right = x / 2 + 1 ; // 否则会超时
        // 在区间 [left..right] 查找目标元素
        while (left &lt; right) {
            int mid = left + (right - left) / 2; // mid取]]></description><category></category></item></channel></rss>