LeetCode 第16双周赛

T1:1287. 有序数组中出现次数超过25%的元素

解题思路:由于题目已经告诉我们数组是排好序的,并且由于给的范围比较小,所以可以直接利用双循环在做。

class Solution {
    public int findSpecialInteger(int[] arr) {
        int n = arr.length;
		for (int i = 0; i < n; i++) {
			int flag = 0;
			for (int j = i; j < n; j++) {
				if (arr[j]==arr[i]){
					flag++;
				}
			}
			if (flag*4>n){
				return arr[i];
			}
		}
		return 0;
    }
}

T2:1288. 删除被覆盖区间

解题思路:利用双循环直接去遍历看每一个区间能否被覆盖,如果能则标记加一,最后只需要输出(总数-标记)即可。

class Solution {
    public int removeCoveredIntervals(int[][] intervals) {
        int n = intervals.length;
		boolean visited[] = new boolean[n];
		int ans = 0;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (i==j || visited[j])continue;
				if (intervals[j][0]<=intervals[i][0] && intervals[j][1]>=intervals[i][1]){
					ans++;
					visited[i] = true;
					break;
				}
			}
		}
		return n-ans;
    }
}

T3:1286. 字母组合迭代器

解题思路:由于题目给出的范围并不是很大,所以这里选择直接使用dfs生成全排列的方式,把所有的字母组合放到一个List中。然后利用一个定位指针来输出相应值与判断是否存在下一个字母组合。

class CombinationIterator {
    int flag = 0;
    List dict = new ArrayList<>();
    
    public CombinationIterator(String characters, int combinationLength) {
        dfs(characters,combinationLength,new StringBuilder(),0);
    }
    public void dfs(String characters,int size,StringBuilder curr,int index){
        if(curr.length()==size){
            dict.add(curr.toString());
            return;
        }
        for(int i = index;iflag;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值