6.14题解

1.

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 1:

输入: [0,1,2,4,5,7]
输出: [“0->2”,“4->5”,“7”]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。
示例 2:

输入: [0,2,3,4,6,8,9]
输出: [“0”,“2->4”,“6”,“8->9”]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> ls = new ArrayList<>();
        int j = 0;
        List<Integer> list = new ArrayList<>();
        for(int i = 0;i < nums.length;i ++){
            j = i + 1;
            if(j > nums.length - 1){
                StringBuffer sb =new StringBuffer();
                sb.append(nums[i]);
                ls.add(sb.toString());
            }
            else{
                if(nums[i] + 1 != nums[j] && list.size() != 0){
                    StringBuffer sb =new StringBuffer();
                    sb.append(list.get(0) + "");
                    sb.append("->");
                    sb.append(nums[i]);
                    ls.add(sb.toString());
                    for(int k = 0;k < list.size();k ++){
                        list.remove(k --);
                    }
                }else if(nums[i] + 1 != nums[j] && list.size() == 0){
                    StringBuffer sb =new StringBuffer();
                    sb.append(nums[i] + "");
                    ls.add(sb.toString());
                    i = --j;
                }else if(nums[i] + 1 == nums[j] && j != nums.length - 1){
                    list.add(nums[i]);
                }else if(nums[i] + 1 == nums[j] && j == nums.length - 1){
                    list.add(nums[i]);
                    list.add(nums[j]);
                    StringBuffer sb =new StringBuffer();
                    sb.append(list.get(0) + "");
                    sb.append("->");
                    sb.append(nums[j]);
                    ls.add(sb.toString());
                    for(int k = 0;k < list.size();k ++){
                        list.remove(k --);
                    }
                    break;
                }
            }
        }
        return ls;
    }
}

2.

给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext()。设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元素 peek() 出来。

示例:

假设迭代器被初始化为列表 [1,2,3]。

调用 next() 返回 1,得到列表中的第一个元素。
现在调用 peek() 返回 2,下一个元素。在此之后调用 next() 仍然返回 2。
最后一次调用 next() 返回 3,末尾元素。在此之后调用 hasNext() 应该返回 false。

class PeekingIterator implements Iterator<Integer> {
    Iterator<Integer> iterator;
    Integer cache;
    public PeekingIterator(Iterator<Integer> iterator) {
        this.iterator = iterator;
        if (iterator.hasNext()){
            cache = iterator.next();
        }
    }
    public Integer peek() {
        return cache;
    }
    @Override
    public Integer next() {
        int temp = cache;
        if (iterator.hasNext()){
            cache = iterator.next();
        }else {
            cache = null;
        }
        return temp;
    }
    @Override
    public boolean hasNext() {
        return cache != null;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值