51、数组中重复的数字
https://blog.youkuaiyun.com/malele4th/article/details/79333216
https://blog.youkuaiyun.com/derrantcm/article/details/46811855
class Solution {
public:
bool duplicate(int numbers[], int length, int* duplication) {
if (numbers == nullptr || length <= 1)
{
duplication = nullptr;
return false;
}
for(int i=0;i<length;i++)
{
while (numbers[i] != i)
{
if (numbers[i] == numbers[numbers[i]])
{
*duplication = numbers[i];
return true;
}
int temp = numbers[i];
numbers[i] = numbers[temp];
numbers[temp] = temp;
}
}
return false;
}
};
52、构建乘积数组
https://blog.youkuaiyun.com/malele4th/article/details/79333223
https://blog.youkuaiyun.com/derrantcm/article/details/46825625
class Solution {
public:
vector<int> multiply(const vector<int>& A) {
vector<int> vec;
int size = A.size();
if (size == 0) return vec;
vec.push_back(1);
for (int i = 0; i < size-1; i++)
vec.push_back(vec.back()*A[i]);
int temp = 1;
for (int i = size - 1; i >= 0; i--)
{
vec[i] *= temp;
temp *= A[i];
}
return vec;
}
};
53、正则表达式匹配
https://blog.youkuaiyun.com/malele4th/article/details/79334727
https://blog.youkuaiyun.com/derrantcm/article/details/46825653
class Solution {
public:
bool match(char* str, char* pattern)
{
if (*str == '\0'&&*pattern == '\0') return true;
if (*str != '\0'&&*pattern == '\0') return false;
if (*(pattern + 1) != '*')
{
if (*str == *pattern || (*str != '\0'&&*pattern == '.'))
return match(str + 1, pattern + 1);
else return false;
}
else
{
if (*str == *pattern || (*str != '\0'&&*pattern == '.'))
return match(str, pattern + 2) || match(str + 1, pattern);
else
return match(str, pattern + 2);
}
}
};
54、表示数值的字符串
https://blog.youkuaiyun.com/malele4th/article/details/79334763
https://blog.youkuaiyun.com/derrantcm/article/details/46825671
class Solution {
public:
bool isNumeric(char* str)
{
bool sign=false,decimal=false,hase=false;
for(int i=0;i<strlen(str);i++)
{
if(str[i]=='e'||str[i]=='E')
{
if(i==strlen(str)-1)return false;
if(hase) return false;
hase=true;
}
else if(str[i]=='+'||str[i]=='-')
{
if(sign&&str[i-1]!='e'&&str[i-1]!='E') return false;
if(!sign&&i>0&&str[i-1]!='e'&&str[i-1]!='E')return false;//or if(i!=0&&str[i-1]!='e'&&str[i-1]!='E') return false;
sign=true;
}
else if(str[i]=='.')
{
if(hase||decimal) return false;
decimal=true;
}
else if(str[i]<'0'||str[i]>'9')return false;
}
return true;
}
};
55、字符流中第一个不重复的字符(hash表)
https://blog.youkuaiyun.com/malele4th/article/details/79334816
https://blog.youkuaiyun.com/derrantcm/article/details/46838825
class Solution
{
public:
string str;
char hash[256] = {0};//“={0}”可不加
void Insert(char ch)
{
str += ch;
hash[ch]++;
}
char FirstAppearingOnce()
{
int size = str.size();
for (int i = 0; i < size; i++)
{
if (hash[str[i]] == 1) return str[i];
}
return '#';
}
};
56、链表中环的入口结点:
https://blog.youkuaiyun.com/malele4th/article/details/79334922
https://blog.youkuaiyun.com/derrantcm/article/details/46838835
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
ListNode *p1 = pHead;
ListNode *p2 = pHead;
while (p2 != nullptr&&p2->next != nullptr)
{
p1 = p1->next;
p2 = p2->next->next;
if (p1 == p2) {
p2 = pHead;
while (p1 != p2)
{
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
}
return nullptr;
}
};
57、删除链表中重复的结点
https://blog.youkuaiyun.com/malele4th/article/details/79335015
https://blog.youkuaiyun.com/derrantcm/article/details/46847909
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead == nullptr)return nullptr;
if (pHead != nullptr&&pHead->next == nullptr)return pHead;
ListNode *cur = pHead;
if (cur->next->val == cur->val)
{
cur = cur->next->next;
while (cur != nullptr&&cur->val == pHead->val)
cur = cur->next;
return deleteDuplication(cur);
}
else {
cur = cur->next;
pHead->next = deleteDuplication(cur);
return pHead;
}
}
};
58、二叉树的下一个结点:
https://blog.youkuaiyun.com/malele4th/article/details/79335019
https://blog.youkuaiyun.com/derrantcm/article/details/46847919
class Solution {
public:
TreeLinkNode* GetNext(TreeLinkNode* pNode)
{
if (pNode == nullptr) return nullptr;
if (pNode->right != nullptr) {
pNode = pNode->right;
while (pNode->left != nullptr)
{
pNode = pNode->left;
}
return pNode;
}
while (pNode->next != nullptr)
{
TreeLinkNode *p = pNode->next;
if (p->left == pNode) return p;
pNode = pNode->next;
}
return nullptr;
}
};
59、对称的二叉树:
https://blog.youkuaiyun.com/malele4th/article/details/79335103
https://blog.youkuaiyun.com/derrantcm/article/details/46847939
class Solution {
public:
bool isSymmetrical(TreeNode* pRoot)
{
if (pRoot == nullptr)return true;
return issame(pRoot->left, pRoot->right);
}
bool issame(TreeNode *p1, TreeNode *p2)//子函数
{
if (p1 == nullptr&&p2 == nullptr) return true;
if (p1 == nullptr&&p2 != nullptr) return false;
if (p1 != nullptr&&p2 == nullptr) return false;
if (p1->val == p2->val)
return issame(p1->left, p2->right) && issame(p1->right, p2->left);
else
return false;
}
};
60、把二叉树打印成多行
https://blog.youkuaiyun.com/malele4th/article/details/79335406
https://blog.youkuaiyun.com/derrantcm/article/details/46857911
可对比“判断是否为全二叉树”
class Solution {
public:
vector<vector<int>> Print(TreeNode* pRoot) {
vector<vector<int>> res;
if (pRoot == nullptr)return res;
queue<TreeNode*>que;
que.push(pRoot);
while (!que.empty())
{
vector<int>vec;
int size = que.size();
for (int i = 0; i < size; i++)
{
TreeNode *temp = que.front();
vec.push_back(temp->val);
que.pop();
if (temp->left != nullptr) que.push(temp->left);
if (temp->right != nullptr) que.push(temp->right);
}
res.push_back(vec);
}
return res;
}
};