首页 > 其他分享 >LeetCode刷题第七周

LeetCode刷题第七周

时间:2022-12-23 12:00:12浏览次数:68  
标签:return 第七 nums int public ++ length LeetCode 刷题

455、分发饼干

class Solution {
    public int count;
    public int findContentChildren(int[] g, int[] s) {
        Arrays.sort(g);
        Arrays.sort(s);
        count = 0;
        int indexS = 0;
        int indexG = 0;
        while(indexS < s.length && indexG < g.length){
            if(s[indexS] >= g[indexG]){
                count++;
                indexG++;
                indexS++;
            }else{
                indexS++;
            }
        }
        return count;
    }
}

376、摆动序列

class Solution {
    public int wiggleMaxLength(int[] nums) {
        if(nums.length <= 1){
            return nums.length;
        }
        int pre = 0;
        int cur = 0;
        int count = 1;
        for(int i = 1; i < nums.length; i++){
            cur = nums[i] - nums[i - 1];
            if((cur > 0 && pre <= 0) || (cur < 0 && pre >= 0)){
                count++;
                pre = cur;
            }        
        }
        return count;
    }
}

53、最大子数组和

class Solution {
    public int maxSubArray(int[] nums) {
        if(nums.length == 1){
            return nums[0];
        }
        int count = 0;
        int sum = Integer.MIN_VALUE;
        for(int i = 0; i < nums.length; i++){
            count += nums[i];
            sum = Math.max(sum, count);
            if(count <= 0){
                count = 0;
            }
        }
        return sum;
    }
}

122、买卖股票的最佳时机 II

class Solution {
    public int maxProfit(int[] prices) {
        int max = 0;
        for(int i = 1; i < prices.length; i++){
            if(prices[i] > prices[i - 1]){
                max += prices[i] - prices[i - 1];
            }
        }
        return max;
    }
}

55、跳跃游戏

class Solution {
    public boolean canJump(int[] nums) {
        if(nums.length == 1){
            return true;
        }
        int coverMax = 0;
        for(int i = 0; i <= coverMax; i++){//防止中途就出现覆盖范围中断
            coverMax = Math.max(coverMax, i + nums[i]);
            if(coverMax >= nums.length - 1){
                return true;
            }
        }
        return false;
    }
}

45、跳跃游戏 II

class Solution {
    public int jump(int[] nums) {
        int count = 0;
        if(nums.length == 1){
            return count;
        }
        // 当前覆盖范围
        int coverMax = 0;
        // 最大覆盖范围
        int maxCover = 0;
        for(int i = 0; i < nums.length; i++){
            // 更新在当前覆盖范围内的最大覆盖范围(下一步可以跳到的最大范围)
            maxCover = Math.max(nums[i] + i, maxCover);
            // 再跳一步就可以到达
            if(maxCover >= nums.length - 1){
                count++;
                break;
            }
            // 到达当前覆盖范围最大值,需要下一跳
            if(i == coverMax){
                count++;
                coverMax = maxCover;
            }
        }
        return count;
    }
}

1005、K 次取反后最大化的数组和

class Solution {
    public int largestSumAfterKNegations(int[] nums, int k) {
        Arrays.sort(nums);
        int index = 0;
        for(int i = 0; i < k; i++){
            if(i < nums.length - 1 && nums[index] < 0){
                nums[index] = -nums[index];
                if(nums[index] >= Math.abs(nums[index + 1])){
                    index++;
                }
                continue;
            }
            nums[index] = -nums[index];
        }
        int sum = 0;
        for(int j = 0; j < nums.length; j++){
            sum += nums[j];
        }
        return sum;
    }
}

134、加油站

class Solution {
    public int canCompleteCircuit(int[] gas, int[] cost) {
        int[] arr = new int[gas.length];
        int sum = 0;
        int curSum = 0;
        int index = 0;
        for(int i = 0; i < arr.length; i++){
            arr[i] = gas[i] - cost[i];
            sum += arr[i];
            curSum += arr[i];
            if(curSum < 0){
                index = (i + 1)%arr.length;
                curSum = 0;
            }
        }
        if(sum >= 0){
            return index;
        }else{
            return -1;
        }
    }
}

135、分发糖果

class Solution {
    public int candy(int[] ratings) {
       // 最少糖果数目
       int[] arrResult = new int[ratings.length];
       arrResult[0] = 1;
        for(int i = 1; i < ratings.length; i++){
            arrResult[i] = ratings[i] > ratings[i - 1] ? arrResult[i - 1] + 1 : 1;
        }
        for(int i = ratings.length - 2; i >= 0; i--){
            if(ratings[i] > ratings[i + 1]){
                arrResult[i] =  Math.max(arrResult[i],arrResult[i + 1] + 1);
            } 
        }
        int sum = 0;
        for(int j = 0; j < arrResult.length; j++){
            sum += arrResult[j];
        }
        return sum;
    }
}

860、柠檬水找零

class Solution {
    public boolean lemonadeChange(int[] bills) {
        if(bills[0] != 5){
            return false;
        }
        if(bills.length == 1){
            return true;
        }
        List<Integer> money = new LinkedList<>();
        money.add(5);
        for(int i = 1; i < bills.length; i++){
            if(bills[i] == 5){
                money.add(5);
            }else if(bills[i] == 10){
                if(!money.contains(5)){
                    return false;
                }
                money.add(10);
                money.remove(new Integer(5));
            }else if(bills[i] == 20){
                if(money.contains(5) && money.contains(10)){
                    money.add(20);
                    money.remove(new Integer(5));
                    money.remove(new Integer(10));
                }else if(money.contains(5)){
                    for(int j = 0; j < 3; j++){
                        if(!money.contains(5)){
                            return false;
                        }
                        money.remove(new Integer(5));
                    }
                    money.add(20);
                }else{
                    return false;
                }
            }
        }
        return true;
    }
}

406、根据身高重建队列

class Solution {
    public int[][] reconstructQueue(int[][] people) {
        Arrays.sort(people,(a,b)->{
            if(a[0]==b[0]) return a[1] - b[1];
            return b[0] - a[0];
        });
        List<int[]> queue = new LinkedList<>();
        for(int[] p: people){
            queue.add(p[1],p);
        }
        return queue.toArray(new int[people.length][]);
    }
}

452、用最少数量的箭引爆气球

class Solution {
    public int findMinArrowShots(int[][] points) {
        Arrays.sort(points, (a, b) -> Integer.compare(a[0], b[0]));
        int count = 1;
        for(int i = 1; i < points.length; i++){
            if(points[i][0] > points[i-1][1]){
                count++;
            }else{
                points[i][1] = Math.min(points[i-1][1],points[i][1]);
            }
        }
        return count;
    }
}

435、 无重叠区间

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->{
            if(a[0]==b[0])return a[1]-b[1];
            return a[0]-b[0];
        });
        int resultCount = 0;
        int right = intervals[0][1];
        for(int i = 1; i < intervals.length; i++){
            if(intervals[i][0] < right){
                resultCount++;
                if(intervals[i][1] < right){
                    right = intervals[i][1];
                }
            }else{
                right = intervals[i][1];
            }
        }
        return resultCount;
    }
}

763、划分字母区间

class Solution {
    public List<Integer> partitionLabels(String s) {
        List<Integer> result = new ArrayList<>();
        char temp;
        int right = 0;
        int left = 0;
        for(int j = 0; j < s.length(); j++){
            temp = s.charAt(j);
            for(int i = s.length() - 1; i >= 0; i--){
                if(temp == s.charAt(i)){
                    right = Math.max(right,i);
                    break;
                }
            }
            if(j==right){
                result.add(right-left+1);
                left = right+1;
            }
        }
        
        return result;
    }
}

56、合并区间

class Solution {
    public int[][] merge(int[][] intervals) {
        Arrays.sort(intervals,(a,b)->{
            if(a[0]==b[0])return a[1]-b[1];
                return a[0]-b[0];
        });
        List<int[]> result = new LinkedList<>();
        int right = intervals[0][1];
        int left = intervals[0][0];
        int count = 1;
        for(int i = 1; i < intervals.length; i++){
            if(intervals[i][0]<=right){
                right = Math.max(right,intervals[i][1]);
            }else{
                result.add(new int[]{left,right});
                left=intervals[i][0];
                right=intervals[i][1];
                count++;
            }
        }
        result.add(new int[]{left,right});
        return result.toArray(new int[count][]);
    }
}

738、单调递增的数字

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String str = String.valueOf(n);
        char[] arr = str.toCharArray();
        int start = arr.length;
        for(int i = arr.length - 2; i >= 0; i--){
            if(arr[i] > arr[i+1]){
                arr[i]--;
                start = i+1;
            }
        }
        for(int j = start; j<arr.length; j++){
            arr[j]='9';
        }
        return Integer.parseInt(String.valueOf(arr));
    }
}

714、买卖股票的最佳时机含手续费

class Solution {
    public int maxProfit(int[] prices, int fee) {
        if(prices.length==1){
            return 0;
        }
        int index = prices[0]+fee;
        int sum=0;
        for(int i = 1; i < prices.length; i++){
            if(prices[i]>index){
                sum+=prices[i]-index;
                index=prices[i];
            }else if(prices[i]+fee<index){
                index=prices[i]+fee;
            }
        }
        return sum;
    }
}

968、监控二叉树

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    int  res=0;
    public int minCameraCover(TreeNode root) {
        // 对根节点的状态做检验,防止根节点是无覆盖状态 .
        if(minCame(root)==0){
            res++;
        }
        return res;
    }
    /**
     节点的状态值:
       0 表示无覆盖 
       1 表示 有摄像头
       2 表示有覆盖 
    后序遍历,根据左右节点的情况,来判读 自己的状态
     */
    public int minCame(TreeNode root){
        if(root==null){
            // 空节点默认为 有覆盖状态,避免在叶子节点上放摄像头 
            return 2;
        }
        int left=minCame(root.left);
        int  right=minCame(root.right);
        
        // 如果左右节点都覆盖了的话, 那么本节点的状态就应该是无覆盖,没有摄像头
        if(left==2&&right==2){
            //(2,2) 
            return 0;
        }else if(left==0||right==0){
            // 左右节点都是无覆盖状态,那 根节点此时应该放一个摄像头
            // (0,0) (0,1) (0,2) (1,0) (2,0) 
            // 状态值为 1 摄像头数 ++;
            res++;
            return 1;
        }else{
            // 左右节点的 状态为 (1,1) (1,2) (2,1) 也就是左右节点至少存在 1个摄像头,
            // 那么本节点就是处于被覆盖状态 
            return 2;
        }
    }
}

标签:return,第七,nums,int,public,++,length,LeetCode,刷题
From: https://www.cnblogs.com/noviceprogrammeroo/p/16979699.html

相关文章

  • leetcode-11. 盛最多水的容器
    ​​11.盛最多水的容器​​难度中等3977收藏分享切换为英文接收动态反馈给定一个长度为​​n​​的整数数组​​height​​。有​​n​​条垂线,第​​i​​条线的......
  • 刷题统计
    刷题统计问题描述小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做aa道题目,周六和周日每天做bb道题目。请你帮小明计算,按照计划他将在......
  • leetcode-回文数
    9.回文数给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1......
  • [LeetCode]011-盛最多水的容器
    >>>传送门题目给定一个长度为n的整数数组 height 。有 n 条垂线,第i条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同......
  • leetcode笔记——单调栈
    在leetcode中,使用单调栈的题大多是寻找下一个更大的数类似,我感觉其他变形问题还是挺难搞的实际处理时候可能还是先暴力,再想着怎么通过单调栈去优化吧列一下今天遇到的三......
  • #yyds干货盘点# LeetCode程序员面试金典:特定深度节点链表
    题目:给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为D,则会创建出D个链表)。返回一个包含所有深度的链表的数组。 示例:输入:[1,2,3,4,5,......
  • [leetcode]第 6 天 搜索与回溯算法(简单)
    32-I.从上到下打印二叉树思路没有思路。。看题解要求二叉树从上至下打印,叫做二叉树的广度优先搜索(BFS)。BFS通常借助队列的先入先出特性实现。算法流程:1.特例处理......
  • PyTorch 深度学习实践第七讲(处理多维特征的输入)
    基本原理降维基本原理备注:读文档和基本架构能力很重要,具备此技能能够拥有强的泛化能力上课代码importtorchimportnumpyasnpimporttorch.nn.functionalasFimportmatp......
  • leetcode.cn165
    最近刷leetcode.cn,碰到这题。题目很水,没啥说的,主要是写法的问题。因为leetcode.cn蛋疼的输入输出通过参数给出,不方便用cin。以前遇到这种题我一般会用java,写法很简单,spli......
  • 软件测试基础~第七讲
    点击查阅-->软件测试基础~第七讲......