389找不同

`@}~FAS3O4P09@NCOEVO[5A.png](https://cdn.nlark.com/yuque/0/2022/png/26928222/1650817137993-d67c03ba-6286-475b-84da-7f9867ed89c7.png#clientId=u3270b40c-25af-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=754&id=uf11460c2&margin=%5Bobject%20Object%5D&name=%60%40%7D~FAS3O4P09%40NCOEVO%5B5A.png&originHeight=628&originWidth=852&originalType=binary&ratio=1&rotation=0&showTitle=false&size=43489&status=done&style=none&taskId=ue51a438a-05d8-42e6-9eda-fd154e965ad&title=&width=1022.3999512481713)![1RZ~N`SRMCRD(HB66C]D7P5.png

思路

java
首先遍历字符串 ss,对其中的每个字符都将计数值加 11;然后遍历字符串 tt,对其中的每个字符都将计数值减 11。当发现某个字符计数值为负数时,说明该字符在字符串 tt 中出现的次数大于在字符串 ss 中出现的次数,因此该字符为被添加的字符。

python
利用 Counter (在标准库的 collections 里) 可以一句话实现。

代码

  1. class Solution {
  2. public char findTheDifference(String s, String t) {
  3. int[] cnt = new int[26];
  4. for (int i = 0; i < s.length(); ++i) {
  5. char ch = s.charAt(i);
  6. cnt[ch - 'a']++;
  7. }
  8. for (int i = 0; i < t.length(); ++i) {
  9. char ch = t.charAt(i);
  10. cnt[ch - 'a']--;
  11. if (cnt[ch - 'a'] < 0) {
  12. return ch;
  13. }
  14. }
  15. return ' ';
  16. }
  17. }
  1. class Solution:
  2. def findTheDifference(self, s: str, t: str) -> str:
  3. return list(Counter(t) - Counter(s))[0]

496 下一个更大元素

![]]B9MCR6ZV[6]M[T2G]42G.png{_G}SS_M(0X0MP9VXTP`WFS.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 即为最终结果

代码

  1. class Solution {
  2. public int[] nextGreaterElement(int[] nums1, int[] nums2) {
  3. int m = nums1.length, n = nums2.length;
  4. int[] res = new int[m];
  5. for (int i = 0; i < m; ++i) {
  6. int j = 0;
  7. while (j < n && nums2[j] != nums1[i]) {
  8. ++j;
  9. }
  10. int k = j + 1;
  11. while (k < n && nums2[k] < nums2[j]) {
  12. ++k;
  13. }
  14. res[i] = k < n ? nums2[k] : -1;
  15. }
  16. return res;
  17. }
  18. }
  1. class Solution:
  2. def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
  3. m, n = len(nums1), len(nums2)
  4. res = [0] * m
  5. for i in range(m):
  6. j = nums2.index(nums1[i])
  7. k = j + 1
  8. while k < n and nums2[k] < nums2[j]:
  9. k += 1
  10. res[i] = nums2[k] if k < n else -1
  11. return res