Leetcode刷题 day01 数组

一,1476,子矩形查询

java的stack类:栈是vector的一个子类,它实现了一个标准的后进先出的栈。堆栈除了包括由vector定义的所有方法,也定义了自己的一些方法。vector基于数组。

LinkedList链表类似于ArrayList,是一种常用的数据容器。与ArrayList相比,LinkedList的增加和删除对操作效率更高,而查找和修改的操作效率较低。

二,主要元素。若数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。

解法1:采用摩尔投票法当数组中存在主要元素时该摩尔投票算法一定成立,且最终的结果一定是major。投票法的基本原理是,维护一个众数major和一个频数count,如果出现不同的数count减1,如果出现相同的数,count+1.,当count减为0时,将major更新为当前遍历的数并设置count=1.最终会发现,如果存在主要元素,那么count一定大于0,否则一定不存在主要元素。但仅大于0也不一定能判断确实存在主要元素,因为如果数组维【4,3,3,2,2,2】,会发现count 为2.但是,2并不是主要元素,所以还要添加验证环节。时间

复杂度为O(N),空间复杂度为O(1)。

class Solution {
    public int majorityElement(int[] nums) {
        int count = 1;
        int major = nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==major){
                count++;
            }else{
                count--;
            }
            if(count==0){
                major=nums[i];
                count=1;
            }
        }

        //验证
        int t = nums.length/2+1;
        count =0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]==major){
                count++;
            }
        }
        if(count>=t)return major;
        else return -1;

    }
}

  该算法演示网站:https://www.cs.utexas.edu/~moore/best-ideas/mjrty/index.html

 

三,直方图的水量。题目链接:https://leetcode-cn.com/problems/volume-of-histogram-lcci/

解法一:单调栈单调栈的含义就是站内元素是单调的,这里用到的栈是单调递减的(相同也可以)。我们依次将元素压入栈,如果当前元素小于等于栈顶元素则入栈,如果大于栈顶元素则先将栈顶不断出栈,直到当前元素小于等于栈顶元素则入栈。

解法二:使用双指针法。缓存两端最大值,从最大值较小的一边进行储水结算,移动,并更新最大值。

posted @ 2021-01-22 20:03  啵啵啵都有人在使用吗  阅读(80)  评论(0编辑  收藏  举报