JZ50 第一个只出现一次的字符
题源 👉 第一个只出现一次的字符_牛客题霸_牛客网 (nowcoder.com)
题目描述:
具体实现:
方法一:哈希表
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
Map<Character,Integer> map = new HashMap<>();
for(int i = 0; i < str.length(); i++)
map.put(str.charAt(i), map.getOrDefault(str.charAt(i), 0)+1);
for(int i = 0; i < str.length(); i++){
if(map.get(str.charAt(i)) == 1)
return i;
}
return -1;
}
}
时间:O(n)
空间:O(1) 哈希表大小不会超过字符集(52个字符),属常数空间
JZ57 和为S的两个数字
题源 👉 和为S的两个数字_牛客题霸_牛客网 (nowcoder.com)
题目描述:
具体实现:
- 方法一:双指针
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
int l = 0, r = array.length - 1;
ArrayList<Integer> list = new ArrayList<>();
while(l < r){
int a = array[l] + array[r];
if(a == sum){
list.add(array[l]);
list.add(array[r]);
return list;
}else if(a < sum){
l++;
}else{
r--;
}
}
return list;
}
}
时间:O(n)
空间:O(1)
JZ56 数组中只出现一次的两个数字
题源 👉 数组中只出现一次的两个数字_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=265&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D13%26type%3D265&difficulty=&judgeStatus=&tags=&title=最小的k个数&gioEnter=menu)
题目描述
具体实现:
方法一:哈希表
import java.util.*;
public class Solution {
public int[] FindNumsAppearOnce (int[] array) {
int[] ans = new int[2];
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < array.length; i++)
map.put(array[i], map.getOrDefault(array[i], 0)+1);
for(int i = 0, j = 0; i < array.length; i++){
if(j == 2) break;
if(map.get(array[i]) == 1)
ans[j++] = array[i];
}
if(ans[0] > ans[1]){
int temp = ans[0];
ans[0] = ans[1];
ans[1] = temp;
}
return ans;
}
}
时间:O(n)
空间:O(n)
方法二:异或运算 源自官方题解👉 题解 | #数组中只出现一次的两个数字#_牛客博客 (nowcoder.net)