242.有效异位词
//异位词(字母异位词是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。),然后这题用哈希表的方法,第一个字符串用record数组记录
//各个字符出现的次数,然后再遍历下一个字符串减去出现的次数,最终如果record里面的值都为0.则为异位词。返回true,否则返回flase
class Solution {
public boolean isAnagram(String s, String t) {
int []record =new int[26];
for(char c:s.toCharArray()){
record[c-'a']+=1;
}
for(char c:t.toCharArray()){
record[c-'a']-=1;
}
for(int i : record){
if(i !=0){
return false;
}
}
return true;
}
}
349两个数组的交集
//创建两个 HashSet 对象 set1 和 resSet。set1 用于存储 nums1 中的所有元素(去除重复),而 resSet 用于存储交集结果。
//遍历 nums1,将其中的每个元素添加到 set1 中。由于 HashSet 不允许重复元素,所以 nums1 中的重复元素会被自动忽略。
//遍历 nums2,对于 nums2 中的每个元素,检查它是否存在于 set1 中。如果存在,说明这个元素是 nums1 和 nums2 的交集的一部分,因此将其添加到 resSet 中。
//其中比较要注意的是这个哈希集合转换成整型数组,这里采用的操作是定义一个数组,然后遍历哈希表,将表内数据都取到数组里面,最后返回数组
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
return new int[0];
}
Set<Integer>set1 =new HashSet<>();
Set<Integer>resSet =new HashSet<>();
for(int i : nums1){
set1.add(i);
}
for(int i : nums2){
if(set1.contains(i)){
resSet.add(i);
}
}
int[] resultArray = new int[resSet.size()];
int i = 0;
for (Integer num : resSet) {
resultArray[i++] = num;
}
return resultArray;
}
}
539最小时间差
- 逻辑:
- 首先,使用
Collections.sort(timePoints);
对时间点列表进行排序,确保它们按照时间顺序排列。 - 初始化变量
ans
为Integer.MAX_VALUE
,用于存储找到的最小分钟差。 - 使用
getMinutes(timePoints.get(0))
获取列表中第一个时间点的分钟表示,并存储在t0Minutes
中。同时,将preMinutes
也初始化为t0Minutes
,用于记录上一个时间点的分钟表示。 - 遍历排序后的时间点列表(从第二个时间点开始),对于每个时间点:
- 使用
getMinutes(timePoints.get(i))
获取当前时间点的分钟表示,并存储在minutes
中。 - 计算当前时间点和上一个时间点之间的分钟差,并更新
ans
为这个差值和当前ans
中的较小值。 - 更新
preMinutes
为当前时间点的分钟表示,以便在下一次迭代中使用。
- 使用
- 循环结束后,还需要考虑首尾时间点的环绕差。这通过计算
(t0Minutes + 1440) - preMinutes
(这里应该是1440
而不是1400
,因为一天有1440分钟)来实现,并再次更新ans
为这个差值和当前ans
中的较小值。 - 返回
ans
作为结果。
- 首先,使用
class Solution {
public int findMinDifference(List<String> timePoints) {
Collections.sort(timePoints);
int ans=Integer.MAX_VALUE;
int t0Minutes=getMinutes(timePoints.get(0));
int preMinutues=t0Minutes;
for(int i=1;i<timePoints.size();++i){
int minutes=getMinutes(timePoints.get(i));
ans=Math.min(ans,minutes-preMintues);
preMinutes=minutes;
}
ans=Math.min(ans,t0Minutes+1400-preMintues);
return ans;
}
public int getMinutes(String t){
return ((t.charAt(0) - '0') * 10 + (t.charAt(1) - '0')) * 60 + (t.charAt(3) - '0') * 10 + (t.charAt(4) - '0');
}
}