难度:简单
给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。
已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。
请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。
直达链接
示例:
输入:startTime = [4], endTime = [4], queryTime = 4
输出:1
解释:在查询时间只有一名学生在做作业。
class Solution {
public int busyStudent(int[] startTime, int[] endTime, int queryTime) {
int count = 0;
for(int i = 0; i < startTime.length; i++){
if(startTime[i] <= queryTime && queryTime <= endTime[i]){
count++;
}
}
return count;
}
}
难度:中等
「句子」是一个用空格分隔单词的字符串。给你一个满足下述格式的句子 text :
句子的首字母大写
text 中的每个单词都用单个空格分隔。
请你重新排列 text 中的单词,使所有单词按其长度的升序排列。如果两个单词的长度相同,则保留其在原句子中的相对顺序。
请同样按上述格式返回新的句子。
直达链接
示例:
输入:text = “Leetcode is cool”
输出:“Is cool leetcode”
解释:句子中共有 3 个单词,长度为 8 的 “Leetcode” ,长度为 2 的 “is” 以及长度为 4 的 “cool” 。
输出需要按单词的长度升序排列,新句子中的第一个单词首字母需要大写。
输入:text = “Keep calm and code on”
输出:“On and keep calm code”
解释:输出的排序情况如下:
“On” 2 个字母。
“and” 3 个字母。
“keep” 4 个字母,因为存在长度相同的其他单词,所以它们之间需要保留在原句子中的相对顺序。
“calm” 4 个字母。
“code” 4 个字母。
最开始写的代码,有点乱
class Solution {
public String arrangeWords(String text) {
String[] str = text.toLowerCase().split(" ");
int n = str.length;
//排序
for(int i = 0; i < n; ++i){
boolean flag = false;
for(int j = 0; j < n - i - 1; ++j){
if(str[j].length() > str[j+1].length()){
String tmp = str[j];
str[j] = str[j+1];
str[j+1] = tmp;
flag = true;
}
}
if(!flag) break;
}
//大小写
char c = str[0].charAt(0);
if(Character.isLowerCase(c)){
c = Character.toUpperCase(c);
}
StringBuilder sb = new StringBuilder();
for(String s : str){
sb.append(s);
sb.append(' ');
}
sb.deleteCharAt(sb.length()-1);
sb.setCharAt(0, c);
return sb.toString();
}
}
改进后的
1、排序这部分,可以用sort,修改内置的排序规则即可
2、首字母大写可以另外开辟一个StringBuilder这么复杂
class Solution {
public String arrangeWords(String text) {
String[] str = text.toLowerCase().split(" ");
int n = str.length;
//排序
Arrays.sort(str, (o1, o2) -> {
return o1.length()-o2.length();
});
//首字母大写
char firstletter = str[0].charAt(0);
firstletter = (char)(firstletter - 32);
String firstword = firstletter + str[0].substring(1);
str[0] = firstword;
String ans = "";
ans = String.join(" ", str);
return ans;
}
}
tips
给你一个数组 favoriteCompanies ,其中 favoriteCompanies[i] 是第 i 名用户收藏的公司清单(下标从 0 开始)。
请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标。下标需要按升序排列。
示例:
输入: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]
。
输入:favoriteCompanies = [[“leetcode”,“google”,“facebook”],[“leetcode”,“amazon”],[“facebook”,“google”]]
输出:[0,1]
解释:favoriteCompanies[2]=[“facebook”,“google”] 是 favoriteCompanies[0]=[“leetcode”,“google”,“facebook”] 的子集,因此,答案为 [0,1] 。
输入:favoriteCompanies = [[“leetcode”],[“google”],[“facebook”],[“amazon”]]
输出:[0,1,2,3]
双重循环,用HashSet来看是否是子集。
class Solution {
public List<Integer> peopleIndexes(List<List<String>> favoriteCompanies) {
List<Integer> result = new ArrayList<>();
int n = favoriteCompanies.size();
for(int i = 0; i < n; i++){
List<String> list1 = favoriteCompanies.get(i);
boolean flag = true;
for(int j = 0; j < n; j++){
if(i == j){
//自己跟自己比,跳过
continue;
}
//比较,如果是子集,置flag为false
List<String> list2 = favoriteCompanies.get(j);
Set<String> set = new HashSet<>(list2);
if(set.containsAll(list1)){
flag = false;
break;
}
}
if(flag){
result.add(i);
}
}
return result;
}
}
tips:
难度:困难
墙壁上挂着一个圆形的飞镖靶。现在请你蒙着眼睛向靶上投掷飞镖。
投掷到墙上的飞镖用二维平面上的点坐标数组表示。飞镖靶的半径为 r 。
请返回能够落在 任意 半径为 r 的圆形靶内或靶上的最大飞镖数。
直达链接
待更新