ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Leetcode刷题 2021.01.24

2021-01-25 00:01:42  阅读:233  来源: 互联网

标签:24 2021.01 int res ++ board max 战舰 Leetcode


Leetcode刷题 2021.01.24

Leetcode674 最长连续递增序列

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。

今天的每日一题,加了连续的最长递增序列,变得简单不少。因为是连续,所以不需要用dp记录之前的状态了,直接双指针滑动窗口即可。

class Solution {
    public int findLengthOfLCIS(int[] nums) {
        if (nums.length == 0) return 0;
        int n = nums.length;
        int i = 0, j = 1, res = 1;
        while (j < n){
        	//双指针,如果j大于j之前的数,就加1
            while(j < n && nums[j] > nums[j - 1]){
                j++;
            }
            //更新最大值
            if (j - i > res){
                res = j - i;
            }
            //更新i的位置
            i = j;
            //j设置比i大1
            j++;
        }
        return res;
    }
}

Leetcode419 甲板上的战舰

给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 'X’表示,空位用 '.'表示。 你需要遵守以下规则:

给你一个有效的甲板,仅由战舰或者空位组成。
战舰只能水平或者垂直放置。换句话说,战舰只能由 1xN (1 行, N 列)组成,或者 Nx1 (N 行, 1 列)组成,其中N可以是任意大小。

两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰。

力扣有些题的翻译真的是一言难尽,看了好半天和评论的解释才明白。这题因为战舰之间一定有间隔,而且战舰一定是长方形的。所以只要战舰的头部的左上方没有其他战舰就是一艘了。

class Solution {
    public int countBattleships(char[][] board) {
        int m = board.length, n = board[0].length;
        int res = 0;
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
            //如果战舰的左上方没有其他战舰,就是一艘战舰
                if (board[i][j] == 'X' && (i == 0 || board[i - 1][j] == '.') && (j == 0 || board[i][j - 1] == '.')){
                    res++;
                }
            }
        }

        return res;
        
    }
}

Leetcode1014 最佳观光组合

给定正整数数组 A,A[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。

一对景点(i < j)组成的观光组合的得分为(A[i] + A[j] + i - j):景点的评分之和减去它们两者之间的距离。

返回一对观光景点能取得的最高分。

这题也没想用dp之类的做,想法比较简单。遍历数组的时候记录一下当前可以提供的最大值就好了,这里最大值不单单是元素大小,还要记录元素下标的大小,元素下标对于整体大小是有负作用的,所有记录的时候记录下标即可。代码就比较简单了。


class Solution {
    public int maxScoreSightseeingPair(int[] A) {
        int max = 0, res = 0;

        for(int i = 1; i < A.length; i++){
        	//记录全局“最大”值的下标,这里最大值和元素大小以及元素下标有关
            res = Math.max(res, A[max] + A[i] + max - i);
            //更新当前最大
            if (A[max] + max - i < A[i]){
                max = i;
            }
        }

        return res;
    }
}

标签:24,2021.01,int,res,++,board,max,战舰,Leetcode
来源: https://blog.csdn.net/weixin_43447128/article/details/113100074

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有