寒假每日总结

本文讨论了如何使用贪心策略解决跳跃游戏问题,包括判断是否能走到数组的最后一个位置以及求最少步数。同时涉及链表的操作,如删除指定值的节点和使用虚拟头节点简化代码。
摘要由CSDN通过智能技术生成

贪心:

跳跃游戏:

数组a[2,3,1,1,4],每个元素代表下一次最大可以走多少步。

1.问能否走到最后一个位置。

if(cnt==1){

   return true;

} / /特判元素数量为一时肯定能走到;

for(i=0;i<=cover;i++){

    cover=max(i+a[i],cover);  / / 在当前元素能走到的最大位置与当前覆盖位置进行比较;

    if(cover>=4){

       return true;

     }

}

return false;

2.问最少要走几步。

int result=0(记录步数),cur=0(记录当前最大范围),next=0(记录最大覆盖范围)

if(cnt==1){

   return 0;

} / /特判元素数量为一时只需0步;

for(i=0;i<cnt;i++){

     next=max(next,i+arr[i]);

    if(i==cur){
         if(cur!=cnt){

             result++;

             cur=next;

             if(cur>=cnt)break;

         }

else break;

}

printf("%d",result);

链表:

链表的删除元素:

一般操作:

struct ListNode* temp;//temp指针遍历所有链表元素
    while(head && head->val == val) {  //当链表有元素且需要删除链表头元素时
        temp = head;
        head = head->next;
        free(temp);  //释放空间
    }
    struct ListNode *cur = head; //cur指针从头指针元素开始遍历
    while(cur && (temp = cur->next)) { 

//当cur指针不为空时进行循环,且每次循环将temp指针初始化为cur->next.
        if(temp->val == val) {
            free(temp); //释放空间
        }
        else
            cur = cur->next;
    }

虚拟头节点:

ListNode *shead; //设置虚拟头节点方便进行代码的添加与删除操作
    shead = (ListNode *)malloc(sizeof(ListNode));
    shead->next = head;
    ListNode *cur = shead;
    while(cur->next != NULL){
        if (cur->next->val == val){
            ListNode *tmp = cur->next; // tmp指针指向所需删除的元素空间
            cur->next = cur->next->next;

// 将cur指向的元素中的next重新指向cur下下个元素(cur下个元素即所需删除的元素)
            free(tmp); // 释放需要删除的元素空间
        }
        else{
            cur = cur->next; // cur指向下一个元素
        }
    }
    head = shead->next; / / 头指针重新指向防止之前的循环删除了头元素的情况
    free(shead); / / 释放虚拟指针

 

  • 30
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值