2019-11-10

class Solution {
    /**
     * 双指针
     */
    public void sortColors(int[] nums) {
        int l = -1; // 设定[0...l]区间为0, [l + 1...i)前闭后开的区间为1, i表示遍历中要考察的元素
        int r = nums.length; // [r...nums.length)前闭后开的区间值为2
        int i = 0;
        while(i < r){
            if(nums[i] == 0){
                l++;
                nums[l] = 0;
                if(l != i){
                    nums[i] = 1;
                }
                i++;
                
            } else if(nums[i] == 1){
                i++;
            } else {
                r--;
                nums[i] = nums[r];
                nums[r] = 2;
            }
        }
        
    }
}

class ExamRoom {
public:
    int N;//所有座位的个数
    int haveSeated;//已经座了人的座位数
    vector<int> mySeats;//存储各个座位的状态
    ExamRoom(int N) {
        this->N = N;//执行初始化操作
        haveSeated = 0;
        mySeats = vector<int>(N, 0);
    }
    
    int seat() {
        //maxDis 是当前找到的离附近的人最远的间隔数,maxInsert 是对应的下标(坐的位置)
        int maxDis = 0, maxInsert = 0, index = 0;
        //检测第0个位置是否有人坐(也就是最前端是否有空位置段)
        while (index < N && mySeats[index] == 0){
            ++index;
        }
        maxDis = index;//前端出现空位置段初始化为坐在第0个位置,否则index = 0,也可以初始化为第0个位置
        maxInsert = 0;
        while (index < N){
            //跳过坐了人的位置
            while (index < N && mySeats[index] == 1){
                ++index;
            }
            //确定连续空位置区间
            int beforeIndex = index - 1;//beforeIndex记录空位置段的前一个坐了人的下标
            while (index < N && mySeats[index] == 0){
                ++index;
            }
            //更新最大结果
            if (index == N){
                //连续的空位置出现尾端,坐在尾端
                if (maxDis < index - beforeIndex - 1){
                    maxInsert = N - 1;
                    maxDis = index - beforeIndex - 1;
                }
            }
            else if (maxDis < (index - beforeIndex) / 2){//坐在空位置段的中间
                maxDis = (index - beforeIndex) / 2;
                maxInsert = beforeIndex + (index - beforeIndex) / 2;
            }
        }
        haveSeated += 1;
        mySeats[maxInsert] = 1;
        return maxInsert;
    }
    
    void leave(int p) {
        mySeats[p] = 0;
        haveSeated -= 1;
    }
};
class Solution {
    public int longestConsecutive(int[] nums) {
        int max = 0;
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i:nums){
            if(map.getOrDefault(i,0)==0){
                int left = map.getOrDefault(i-1,0);
                int right = map.getOrDefault(i+1,0);
                map.put(i,left+right+1);
                if(left!=0){
                    map.put(i-left,left+right+1);
                }
                if(right!=0){
                    map.put(i+right,right+left+1);
                }
                max = max>(left+right+1)?max:(left+right+1);
            }
        }
        return max;
    }
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 美好的日子总是过得那么的快,本周因为要跑马拉松的原因。所以排班上面,就给与了支持,所以上班时间不是很多。休息的时间...
    晓艳_f118阅读 1,215评论 0 0
  • 上帝掰开你的心思 修炼你的情愫 故人掰开你的过往 苛求你的不堪 旁人掰开你的世界 注入你的世俗 你在申诉 之后掰开...
    木瓜不才阅读 1,482评论 0 5
  • 今天写作4000字,特此记录。 己亥年六月初三 阙题 初三月如钩, 灯下书页皱。 荷塘送风至, 嘴角噙墨斗。 闭门...
    花王解语阅读 1,189评论 0 1
  • 昨日去路遥故居学习,偶得《人生》一书,略一翻阅,竟让人深陷其中,恨不能宿夜不寝读之后快...... 在...
    雁塔小笛阅读 4,344评论 16 37
  • 今天又下雨了,但脸上却仍旧残留着昨天下午走出办公室时被室外的热浪炙烤的燥热感。躁动与孤寂轮番袭击我的灵魂,我分明看...
    我就是上官良i阅读 5,665评论 5 4