力扣 LeetCode日常切题
1. 值相等的最小索引
题解:此题比较简单,一次循环找到符合条件的就return
AC代码如下:
class Solution {
public:
int smallestEqual(vector<int>& nums) {
for(int i=0;i<nums.size();i++)
{
if(i%10==nums[i])
return i;
}
return -1;
}
};
2.找出临界点之间的最小和最大距离
题解:遍历一次记录符合条件的的下标,最后在通过min函数来找到最小距离 最大距离就是最后一项减去第一项。
AC代码如下:
/**
* 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:
vector<int> nodesBetweenCriticalPoints(ListNode* head) {
vector<int>k;
ListNode* a;
a=head;
int cnt=2;
vector<int>ans(2,-1);
while(a->next)
{ ListNode* b=a->next;
ListNode* c=b->next;
if(!c)
break;
if(c&&(b->val>a->val)&&(b->val>c->val)) k.push_back(cnt);
if(c&&(b->val<a->val)&&(b->val<c->val)) k.push_back(cnt);
a=a->next;
b=b->next;
c=c->next;
cnt++;
}
if(k.size()>=2)
ans[0]=1e6,ans[1]=0;
for(int i=1;i<k.size();i++)
{ ans[1]=k[k.size()-1]-k[0];
ans[0]=min(k[i]-k[i-1],ans[0]);
}
return ans;
}
};