解题思路:由于题目已经告诉我们数组是排好序的,并且由于给的范围比较小,所以可以直接利用双循环在做。
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;
}
}
解题思路:利用双循环直接去遍历看每一个区间能否被覆盖,如果能则标记加一,最后只需要输出(总数-标记)即可。
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;
}
}
解题思路:由于题目给出的范围并不是很大,所以这里选择直接使用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;
}
}