leetcode刷题3
- 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素
代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int n = nums.size();
int min = 0;
int max = n - 1;
while (min<= max)
int middle = min+ ((max- min) / 2);
if (nums[middle] > target) {
max= middle - 1; }
else if (nums[middle] < target)
{
min= middle + 1; }
else {
return middle;
}
}
return max+ 1;
}
};
- 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 True ;不是,则返回 False 。
代码:
class Solution {
public:
bool isHappy(int n) {
vector<int> v(1620, 0);
while(1){
if(n==1){
return 1;
}
n = this->f(n);
if(v[n] == 1){
return 0;
}
else{
v[n] = 1;
}
}
}
public:
int f(int n)
{
int val= 0;
while(n!=0){
val += (n % 10)*(n % 10);
n = n / 10;
}
return val;
}
};
- 同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
代码:
class Solution {
public:
bool isIsomorphic(string s, string t)
{
vector<int> pre_s(256, -1);
vector<int> pre_t(256, -1);
for(int i = 0; i < s.size(); i ++)
{
if(pre_s[s[i]] != pre_t[t[i]]) return false;
pre_s[s[i]] = i;
pre_t[t[i]] = i;
}
return true;
}
};
- 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
代码:
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0};
int sn=s.size();
int tn= t.size();
for (int i = 0; i < sn; i++) {
record[s[i] - 'a']++;
}
for (int i = 0; i <tn; i++) {
record[t[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (record[i] != 0) {
return false;
}
}
return true;
}
};