NLP实践TensorFlow打造聊天机器人

<p>想要课程的请访问 icourse8.com/nlp_tensorflow.html</p>
<p>想要课程的请访问 icourse8.com/nlp_tensorflow.html</p>
<h5>更多课程请访问icourse8.com,慕课网全集都有,还有跟多机构课程</h5>
<h5>无论是入门,还是提高,总有一门课程适合你</h5>
<div>icourse8.com/nlp_tensorflow.html</div>

第1章 课程导学
第2章 基础知识
第3章 循环神经网络(RNN与LSTM)
第4章 NLP基础
第5章 文本处理方法
第6章 实战之聊天语料处理
第7章 聊天机器人原理
第9章 聊天机器人训练-seq2seq的模型编写
第10章 聊天机器人模型的训练和验证
第11章 Android的打包与发布
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。

示例 :

//用尾插法实现
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null) return null;
        ListNode tmp=head,tail=head;
        int count=1;

        //检查是否够长
        while (tail.next!=null && count<k){
            tail = tail.next;
            count++;
        }
        //System.out.println("tail.value"+tail.val);
        if (count == k){
            //用递归,head变一变
            //tail后面都排好了
            tail.next = reverseKGroup(tail.next,k);
            ListNode p;
            //尾插,tmp指向第一个,tail指向最后一个
            while (tmp != tail){
                p=tail.next;
                tail.next = tmp;
                tmp = tmp.next;
                tail.next.next = p;
            }  
            return tail;  
        }
        else return head;
    }
}

给定这个链表:1->2->3->4->5

当 k = 2 时,应当返回: 2->1->4->3->5

当 k = 3 时,应当返回: 3->2->1->4->5

说明 :

你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        ListNode prev = null;
        ListNode cur = head;
        ListNode next = null;
        ListNode check = head;
        int canProceed = 0;
        int count = 0;
        // 检查链表长度是否满足翻转
        while (canProceed < k && check != null) {
            check = check.next;
            canProceed++;
        }
        // 满足条件,进行翻转
        if (canProceed == k) {
            while (count < k && cur != null) {
                next = cur.next;
                cur.next = prev;
                prev = cur;
                cur = next;
                count++;
            }
            if (next != null) {
                // head 为链表翻转后的尾节点
                head.next = reverseKGroup(next, k);
            }
            // prev 为链表翻转后的头结点
            return prev;
        } else {
            // 不满住翻转条件,直接返回 head 即可
            return head;
        }
    }
}

猜你喜欢

转载自blog.51cto.com/14127734/2390630