目录
136.只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:输入: [4,1,2,1,2]
输出: 4来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number
-
class Solution {
-
public int singleNumber(int[] nums) {
-
HashSet<Integer> hs1=
new HashSet<Integer>();
-
for(
int i:nums){
-
if(hs1.contains(i)){
-
hs1.remove(i);
-
}
else{
-
hs1.add(i);
-
}
-
}
-
Iterator<Integer> it=hs1.iterator();
-
return (
int)it.next();
-
}
-
}
202.快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number
-
class Solution {
-
public boolean isHappy(int n) {
-
HashSet<Integer> hset1=
new HashSet<Integer>();
-
while(
true){
-
if(n==
1){
-
break;
-
}
-
if(hset1.contains(n)){
-
return
false;
-
}
else{
-
hset1.add(n);
-
n=sunOfsquares(n);
-
}
-
-
}
-
return
true;
-
}
-
public int sunOfsquares(int n){
-
int sum =
0;
-
while(
true ){
-
if( n==
0 ){
-
break;
-
}
-
sum += Math.pow( n%
10 ,
2 );
-
n /=
10;
-
}
-
return sum;
-
}
-
}
219.存在重复元素II
给定一个整数数组和一个整数 k,判断数组中是否存在两个不同的索引 i 和 j,使得 nums [i] = nums [j],并且 i 和 j 的差的 绝对值 至多为 k。
示例 1:
输入: nums = [1,2,3,1], k = 3
输出: true
示例 2:输入: nums = [1,0,1,1], k = 1
输出: true
示例 3:输入: nums = [1,2,3,1,2,3], k = 2
输出: false来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/contains-duplicate-ii
-
class Solution {
-
public boolean containsNearbyDuplicate(int[] nums, int k) {
-
if(k==
0){
-
return
false;
-
}
-
HashSet<Integer> hset1=
new HashSet<Integer>();
-
for(
int i=
0;i<nums.length;i++){
-
if(hset1.contains(nums[i])){
-
return
true;
-
}
else{
-
if(i>=k){
-
hset1.remove(nums[i-k]);
-
}
-
hset1.add(nums[i]);
-
}
-
}
-
return
false;
-
}
-
}
205.同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add"
输出: true
示例 2:输入: s = "foo", t = "bar"
输出: false
示例 3:输入: s = "paper", t = "title"
输出: true
说明:
你可以假设 s 和 t 具有相同的长度。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/isomorphic-strings
-
class Solution {
-
public boolean isIsomorphic(String s, String t) {
-
HashMap<Character,Character> hstab1 =
new HashMap<Character,Character>();
-
for(
int i=
0;i<s.length();i++){
-
char s_char=s.charAt(i);
-
char t_char=t.charAt(i);
-
if(!hstab1.containsKey(s_char)){
-
if(hstab1.containsValue(t_char)){
-
return
false;
-
}
-
hstab1.put(s_char,t_char);
-
}
else
if(hstab1.get(s_char)!=t_char){
-
return
false;
-
}
-
}
-
return
true;
-
}
-
}
242.有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
-
class Solution {
-
public boolean isAnagram(String s, String t) {
-
if(s.length()!=t.length()){
-
return
false;
-
}
-
HashMap<Character,Integer> map_s =
new HashMap<Character,Integer>();
-
HashMap<Character,Integer> map_t =
new HashMap<Character,Integer>();
-
char sc=
' ';
-
char tc=
' ';
-
for(
int i=
0;i<s.length();i++){
-
sc=s.charAt(i);
-
tc=t.charAt(i);
-
if(map_s.containsKey(sc)){
-
map_s.put(sc,map_s.get(sc)+
1);
-
}
else{
-
map_s.put(sc,
1);
-
}
-
if(map_t.containsKey(tc)){
-
map_t.put(tc,map_t.get(tc)+
1);
-
}
else{
-
map_t.put(tc,
1);
-
}
-
}
-
return map_s.equals(map_t);
-
}
-
}
299.猜数字游戏
你正在和你的朋友玩 猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。
请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用 B 表示奶牛。
请注意秘密数字和朋友的猜测数都可能含有重复数字。
示例 1:
输入: secret = "1807", guess = "7810"
输出: "1A3B"
解释: 1 公牛和 3 奶牛。公牛是 8,奶牛是 0, 1 和 7。
示例 2:输入: secret = "1123", guess = "0111"
输出: "1A1B"
解释: 朋友猜测数中的第一个 1 是公牛,第二个或第三个 1 可被视为奶牛。
说明: 你可以假设秘密数字和朋友的猜测数都只包含数字,并且它们的长度永远相等。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bulls-and-cows
-
class Solution {
-
public String getHint(String secret, String guess) {
-
int numsBulls=
0;
-
int numsCows=
0;
-
ArrayList<Character> lst =
new ArrayList<Character>();
-
HashMap<Character,Integer> map =
new HashMap<Character,Integer>();
-
for(
int i=
0;i<guess.length();i++){
-
if(secret.charAt(i)==guess.charAt(i)){
-
numsBulls++;
-
}
else{
-
if(map.containsKey(secret.charAt(i))){
-
map.put(secret.charAt(i),map.get(secret.charAt(i))+
1);
-
}
else{
-
map.put(secret.charAt(i),
1);
-
}
-
lst.add(guess.charAt(i));
-
}
-
}
-
for(
char c:lst){
-
if(map.containsKey(c)){
-
map.put(c,map.get(c)-
1);
-
numsCows++;
-
if(map.get(c)==
0){
-
map.remove(c);
-
}
-
}
-
}
-
return
""+numsBulls+
"A"+numsCows+
"B";
-
}
-
}
290.单词规律
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern
-
class Solution {
-
public boolean wordPattern(String pattern, String str) {
-
ArrayList<String> words =
new ArrayList<String>();
-
String word =
"";
-
for(
int i=
0;i<str.length();i++){
-
if(str.charAt(i)!=
' '){
-
word+=str.charAt(i);
-
}
-
if(str.charAt(i)==
' '||i==str.length()-
1){
-
words.add(word);
-
word =
"";
-
}
-
}
-
if(pattern.length()!=words.size()){
-
return
false;
-
}
-
HashMap<Character,String> map =
new HashMap<Character,String>();
-
for(
int i=
0;i<pattern.length();i++){
-
if(map.containsKey(pattern.charAt(i))){
-
if(!map.get(pattern.charAt(i)).equals(words.get(i))){
-
return
false;
-
}
-
}
else{
-
if(map.containsValue(words.get(i))){
-
return
false;
-
}
-
map.put(pattern.charAt(i),words.get(i));
-
}
-
}
-
return
true;
-
}
-
}
转载:https://blog.csdn.net/qq_45384304/article/details/105631573