提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
书要是记录着一些日常的作题总结提示:以下是本篇文章正文内容,下面案例可供参考
一、二分查找(2020-09-30)
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
代码如下(示例):
int left=0;
int right=nums.size()-1;
int mid;
while(left<=right){//这个地方为边界条件
mid=(left+right)/2; #有时候为了避免无限循环,也写成:mid=left+(right-left)/2
if(target==nums[mid]){
return mid;
}
else if(nums[mid]>target){
right=mid-1;
}
else if(nums[mid]<target){
left=mid+1;
}
}
如果还要目标不在数组里面,还要找一个位置,可以写成:
if(nums[mid]<target){
return mid+1;
}
if(nums[mid]>target){
return mid;
}
二、双指针(2021-10-02)
1,快慢指针
1,找到链表的中间节点,这个时候需要slow指针,一个fast,slow每次移动 一步,fast每次移动两步,这样,当fast移动到末尾时候,slow刚好是中间节点。class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode*slow=head;
ListNode*fast=head;
while(fast!=nullptr&&fast->next!=nullptr){
slow=slow->next;
fast=fast->next->next;
}
return slow;
}
};
2,删除链表倒数第n个节点。快指针比慢指针夺走n步,然后当快指针走到末尾的时候, 慢指针就刚好是倒数第n位。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dum=new ListNode(0,head);//定义一个新的节点,值为0
ListNode*first=head;
ListNode*second=dum;
for(int i=0;i<n;i++){
first=first->next;
}
while(first){
first=first->next;
second=second->next;
}
second->next=second->next->next;//删除节点
ListNode*ans=dum->next;
delete dum;
return ans;
}
};
2,两头的反指针,一个指针在开头,一个在末尾
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 void reverseString(vector<char>& s) {
int p=0,q=s.size()-1;
while(p<q){
swap(s[p],s[q]);
++p;
--q;
}
反转字符串的单词
string reverseWords(string s) {
int p=0,q;
for(int i=0;i<s.size();i++){
if(s[i]==' '){//遇到空格就把之前的反转一下
q=i-1;
s=rolate(s,p,q);
p=i+1;
}
else if(i==s.size()-1){//最后一个单词反转
q=i;
s=rolate(s,p,q);
p=i+1;
}
}
return s;
}
string rolate(string s,int p,int q){
while(p<q){
swap(s[p],s[q]);
++p;
--q;
}
return s;
}
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
public:
void moveZeroes(vector<int>& nums) {
int p=0,q=0;
while(q<nums.size()){
if(nums[q]!=0){
nums[p]=nums[q];
p++;
}
q++;
}
if(p<nums.size()){
for(int i=p;i<nums.size();i++){
nums[i]=0;
}
}
}