今天早上去了医院,下午休息,晚上在弄学校的事情,所以没怎么写题,况且都是简单题索性以后每天弄一个合集发。
P21 合并两个有序链表
题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
解题思路:
没什么好说的,比较简单。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* preHead=new ListNode(-1);
ListNode* prev=preHead;
while(list1!=nullptr&&list2!=nullptr){
if(list1->val<=list2->val){
prev->next=list1;
list1=list1->next;
}
else{
prev->next=list2;
list2=list2->next;
}
prev=prev->next;
}
if(list1!=nullptr)prev->next=list1;
if(list2!=nullptr)prev->next=list2;
return preHead->next;
}
};
P26 26. 删除有序数组中的重复项 - 力扣(LeetCode)
题目:
给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。
考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:(1)更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要;(2)返回 k 。
解题思路:很明显的一道快慢指针问题。
注意点:nums[fast]!=nums[fast-1] 这行代码很有趣,我一开始没有想到这么处理。
class Solution {
public:
int removeDuplicates(vector<int>& nums) {
int len=nums.size();
int fast,slow;
for(fast=1,slow=1;fast<len;fast++){
if(nums[fast]!=nums[fast-1]){
nums[slow++]=nums[fast];
}
}
return slow;
}
};
解题思路:
一样的快慢指针。比上一道简单。
class Solution {
public:
int removeElement(vector<int>& nums, int val) {
int fast,slow;
int len=nums.size();
for(fast=0,slow=0;fast<len;fast++){
if(nums[fast]!=val){
nums[slow++]=nums[fast];
}
}
return slow;
}
};
P28 28. 找出字符串中第一个匹配项的下标 - 力扣(LeetCode)
解题思路:
1、暴力枚举
class Solution {
public:
int strStr(string haystack, string needle) {
int len=haystack.length();
int len2=needle.length();
for(int i=0;i<len;i++){
int index=i;
for(int j=0;j<len2;index++,j++){
if(haystack[index]!=needle[j]){
break;
}
}
if(index==len2+i)return i;
}
return -1;
}
};
2、KMP
也是很显然能想到KMP算法。
明天补完剩下的。。。
2993

被折叠的 条评论
为什么被折叠?



