这个专栏 我将分享每日做的算法题的解题思路 秋招加油!
这是第二天 !!
004 只出现一次的数字
题目
题目链接点击此处
AC代码
class Solution {
public int singleNumber(int[] nums) {
int result = 0;
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
}
Iterator<Map.Entry<Integer,Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<Integer,Integer> entry = iterator.next();
if(entry.getValue() == 1){
result = entry.getKey();
break;
}
}
return result;
}
}
通过HashMap存储计数可以很巧妙的解决,没有什么难度。
005 单词长度的最大乘积
题目
AC代码
class Solution {
public int maxProduct(String[] words) {
int length= words.length;
int[] masks = new int[length];
for(int i=0;i<length;i++){
String word = words[i];
for(int j=0;j<word.length();j++){
masks[i] |= 1<<(word.charAt(j) -'a');
}
}
int max = 0;
for(int i = 0;i<length;i++){
for(int j = i+1;j<length;j++){
if((masks[i] & masks[j]) == 0){
max = Math.max(max, words[i].length() * words[j].length());
}
}
}
return max;
}
}
这道题可以使用暴力法解决,但是时间复杂度较高。
可以通过位运算解决这个问题,通过每个字母存储在不同位上,再通过位与(&)运算,结果为0,则表明没有相同字母,则计算长度的乘积。
006 排序数组中的两个数字之和
题目
AC代码
class Solution {
public int[] twoSum(int[] numbers, int target) {
int sum = 0;
int[] res = new int[2];
for(int i = numbers.length-1,j=0;i>=0;i--){
while(numbers[i] + numbers[j] < target){
j = j + 1;
}
if(numbers[i] + numbers[j] == target){
res[0] = j;
res[1] = i;
break;
}
}
return res;
}
}
这道题暴力解决即可,没有什么难度
进阶可以使用二分法,双指针解决。
备战秋招的第二天,分享一句激励的话吧!
生活坏到一定程度就会好起来,因为它无法更坏,努力过后,才知道许多事情,坚持坚持,就过来了。