给你两个整数数组
startTime
(开始时间)和endTime
(结束时间),并指定一个整数queryTime
作为查询时间。已知,第
i
名学生在startTime[i]
时开始写作业并于endTime[i]
时完成作业。请返回在查询时间
queryTime
时正在做作业的学生人数。形式上,返回能够使queryTime
处于区间[startTime[i], endTime[i]]
(含)的学生人数。示例 1:
输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4
输出:1
解释:一共有 3 名学生。
第一名学生在时间 1 开始写作业,并于时间 3 完成作业,在时间 4 没有处于做作业的状态。
第二名学生在时间 2 开始写作业,并于时间 2 完成作业,在时间 4 没有处于做作业的状态。
第二名学生在时间 3 开始写作业,预计于时间 7 完成作业,这是是唯一一名在时间 4 时正在做作业的学生。
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
int count = 0;
for(int i=0;i<startTime.length;i++){
if(queryTime>=startTime[i] && queryTime <= endTime[i])
count++;
}
return count;
}
「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子
text
:
- 句子的首字母大写
text
中的每个单词都用单个空格分隔。请你重新排列
text
中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。请同样按上述格式返回新的句子。
示例 1:
输入:text = "Leetcode is cool" 输出:"Is cool leetcode" 解释:句子中共有 3 个单词,长度为 8 的 "Leetcode" ,长度为 2 的 "is" 以及长度为 4 的 "cool" 。 输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。
示例 2:
输入:text = "Keep calm and code on" 输出:"On and keep calm code" 解释:输出的排序情况如下: "On" 2 个字母。 "and" 3 个字母。 "keep" 4 个字母,因为存在长度相同的其他单词,所以它们之间需要保留在原句子中的相对顺序。 "calm" 4 个字母。 "code" 4 个字母。
public String arrangeWords(String text) {
String[] splits = text.split(" ");
splits[0] = String.valueOf(Character.toLowerCase(splits[0].charAt(0)))+splits[0].substring(1);
Arrays.sort(splits, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if(s1.length() > s2.length())
return 1;
else if(s1.length() == s2.length())
return 0;
else
return -1;
}
});
splits[0] = String.valueOf(Character.toUpperCase(splits[0].charAt(0)))+splits[0].substring(1);
StringBuilder sb = new StringBuilder();
for(String s:splits){
sb.append(" "+s);
}
return sb.toString().trim();
}
给你一个数组
favoriteCompanies
,其中favoriteCompanies[i]
是第i
名用户收藏的公司清单(下标从 0 开始)。请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标*。下标需要按升序排列。*
示例 1:
输入:favoriteCompanies = [["leetcode","google","facebook"],["google","microsoft"],["google","facebook"],["google"],["amazon"]] 输出:[0,1,4] 解释: favoriteCompanies[2]=["google","facebook"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集。 favoriteCompanies[3]=["google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 和 favoriteCompanies[1]=["google","microsoft"] 的子集。 其余的收藏清单均不是其他任何人收藏的公司清单的子集,因此,答案为 [0,1,4] 。
示例 2:
输入:favoriteCompanies = [["leetcode","google","facebook"],["leetcode","amazon"],["facebook","google"]] 输出:[0,1] 解释:favoriteCompanies[2]=["facebook","google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集,因此,答案为 [0,1] 。
示例 3:
输入:favoriteCompanies = [["leetcode"],["google"],["facebook"],["amazon"]] 输出:[0,1,2,3]
提示:
1 <= favoriteCompanies.length <= 100
1 <= favoriteCompanies[i].length <= 500
1 <= favoriteCompanies[i][j].length <= 20
favoriteCompanies[i]
中的所有字符串 各不相同 。- 用户收藏的公司清单也 各不相同 ,也就是说,即便我们按字母顺序排序每个清单,
favoriteCompanies[i] != favoriteCompanies[j]
仍然成立。- 所有字符串仅包含小写英文字母。
这一题最开始想着先对List进行排序(size排序和子List排序),但是对list排序比较复杂,处理起来不方便;然后想到可不可以借用Set集合来辅助判断,但是我想的是先将所有的List都转为Set然后来判断,越想越麻烦就不想做了;最后参考提交的解答发现Set中有containsAll(List list)来判断是否为子集的方法,这样就豁然开朗了。(主要还是用Set少了,以后要都看看)
public List<Integer> peopleIndexes(List<List<String>> favoriteCompanies) {
List<Integer> res = new ArrayList<>(); //记录结果
if(favoriteCompanies.size() == 1) {
res.add(0);
return res;
}
boolean flag = true; //标识是否为子集
for(int i=0;i<favoriteCompanies.size();i++){
List<String> checkOne = favoriteCompanies.get(i);
flag = true;
for(int j=0;j<favoriteCompanies.size();j++){
if(i==j) continue;
List<String> second = favoriteCompanies.get(j);
//利用Set集合来辅助判断
Set<String> set = new HashSet<>(second);
if(set.containsAll(checkOne)){
//为子集
flag = false;
break;
}
}
if(flag) res.add(i);
}
return res;
}
墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。
投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为
r
。请返回能够落在 任意 半径为
r
的圆形靶内或靶上的最大飞镖数。输入:points = [[-2,0],[2,0],[0,2],[0,-2]], r = 2 输出:4 解释:如果圆形的飞镖靶的圆心为 (0,0) ,半径为 2 ,所有的飞镖都落在靶上,此时落在靶上的飞镖数最大,值为 4 。
输入:points = [[-3,0],[3,0],[2,6],[5,4],[0,9],[7,8]], r = 5 输出:5 解释:如果圆形的飞镖靶的圆心为 (0,4) ,半径为 5 ,则除了 (7,8) 之外的飞镖都落在靶上,此时落在靶上的飞镖数最大,值为 5 。
示例 3:
输入:points = [[-2,0],[2,0],[0,2],[0,-2]], r = 1 输出:1
示例 4:
输入:points = [[1,2],[3,5],[1,-1],[2,3],[4,1],[1,3]], r = 2 输出:4
提示:
1 <= points.length <= 100
points[i].length == 2
-10^4 <= points[i][0], points[i][1] <= 10^4
1 <= r <= 5000
更新中。。。。。。。