剑指 Offer II 004. 只出现一次的数字
sort排序后判断
class Solution {
public:
int singleNumber(vector<int>& nums) {
if(nums.size()==1) return nums[0];
sort(nums.begin(),nums.end());
for(int i=1;i<nums.size()-1;i++){
if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]) return nums[i];
}
if(nums[0]!=nums[1]) return nums[0];
else return nums[nums.size()-1];
}
};
剑指 Offer II 006. 排序数组中两个数字之和
双指针
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int i=0;
int j=numbers.size()-1;
while(numbers[i]+numbers[j]!=target){
if(numbers[i]+numbers[j]<target){
i++;
}
else if(numbers[i]+numbers[j]>target){
j--;
}
else{
return {i,j};
}
}
return {i,j};
}
};
剑指 Offer II 005. 单词长度的最大乘积
字符串转换成数字判断
class Solution {
public:
int maxProduct(vector<string>& words) {
int n=words.size();
vector<int>maxword(n);
for(int i=0;i<words.size();i++){
for(int j=0;j<words[i].size();j++){
maxword[i]|=(1<<(words[i][j]-'a'));
}
}
int ans=0;
for(int i=0;i<n-1;i++){
for(int j=1;j<n;j++){
if((maxword[i] & maxword[j])==0){
ans=max(ans,(int)(words[i].size()*words[j].size()));
}
}
}
return ans;
}
};