389找不同
思路
java
首先遍历字符串 ss,对其中的每个字符都将计数值加 11;然后遍历字符串 tt,对其中的每个字符都将计数值减 11。当发现某个字符计数值为负数时,说明该字符在字符串 tt 中出现的次数大于在字符串 ss 中出现的次数,因此该字符为被添加的字符。
python
利用 Counter (在标准库的 collections 里) 可以一句话实现。
代码
class Solution {
public char findTheDifference(String s, String t) {
int[] cnt = new int[26];
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
cnt[ch - 'a']++;
}
for (int i = 0; i < t.length(); ++i) {
char ch = t.charAt(i);
cnt[ch - 'a']--;
if (cnt[ch - 'a'] < 0) {
return ch;
}
}
return ' ';
}
}
class Solution:
def findTheDifference(self, s: str, t: str) -> str:
return list(Counter(t) - Counter(s))[0]
496 下一个更大元素
![]]B9MCR6ZV[6]M[T2G]42G.png
思路
发现nums 1是一个查询数组,逐个查询nums 2中元素右边的第一个更大的值。因此,可以暴力地逐个计算 nums 1中的每个元素值 nums1[i] 在 nums2中对应位置的右边的第一个nums1[i]大的元素值,方法:
初始化与nums1等长的查询数组res。
遍历nums1中的所有元素,不妨设当前遍历到元素为nums1[i]:
从前向后遍历nums2 中的元素,直至找到nums2[i]=numsi[i];
从j+1开始继续向后遍历,直至找到nums2[k]>nums2[j],其中k≥j+1;
如果找到了nums2[k],则将res[]置为nums2[k],否则将res[团]置为-1。
查询数组 \textit{res}res 即为最终结果
代码
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int m = nums1.length, n = nums2.length;
int[] res = new int[m];
for (int i = 0; i < m; ++i) {
int j = 0;
while (j < n && nums2[j] != nums1[i]) {
++j;
}
int k = j + 1;
while (k < n && nums2[k] < nums2[j]) {
++k;
}
res[i] = k < n ? nums2[k] : -1;
}
return res;
}
}
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
m, n = len(nums1), len(nums2)
res = [0] * m
for i in range(m):
j = nums2.index(nums1[i])
k = j + 1
while k < n and nums2[k] < nums2[j]:
k += 1
res[i] = nums2[k] if k < n else -1
return res