附加题 54-56

面试题54:表示数值的字符串

这道题的关键也在于讨论清楚情况,把所有可能出现的情况都考虑到。需要注意的是,指数E后面必须跟一个整数,不能没有数,也不能为小数。
LeetCode 65

思路梳理

难点:有很多情况需要考虑

class Solution(object):
    def isNumber(self, s):
    # s字符串
        # 需要判断三种合法情况
        # 1. 开头的正负号
        # 2. e后面只能是整数
        # 3. 不能有其他字母
        
        # 去掉首尾的空格
        s = s.strip(' ')
        if len(s)==0:
            return False
        
        # 如果最后一个字符是e
        if s[-1] in ['e','E']:
            return False
        
        num_flag = False
        e_flag = -1
        dot_flag = -1
        
        # 去掉数字的符号位
        if s[0] in ['+','-']:
            s = s[1:]
            
        # 如果第一个字符是小数点
        elif s[0] in ['.']:
            dot_flag = 1
            s = s[1:]
        
        # 如果第一个字符不是数字
        elif not s[0].isdigit():
            return False
        
        for i in range(len(s)):
            if s[i].isdigit():
                num_flag = True
            # 如果当前符号不是数字,则可能的合法情况有两种
            if not s[i].isdigit():
                # 如果是指数部分
                if s[i] in ['e', 'E']:
                    if e_flag == -1:
                        e_flag = 1
                        # 判断e之后的数字是否整数
                        # 并且e之前必须是一个有效的数字
                        if s[i+1] in ['+','-']:
                            return s[i+2:].isdigit() and num_flag
                        else:
                            return s[i+1:].isdigit() and num_flag
                    else:
                        return False
                # 如果是小数点,则改变小数点的标记
                if s[i] == '.':
                    if dot_flag == -1:
                        dot_flag = 1
                    else:
                        return False
                else:
                    return False
        # 如果整个循环都没有返回值,则该字符串通过考验
        return num_flag       

面试题55:字符流中第一个不重复的字符

请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。

思路梳理

新建一个dict,当做哈希表,遍历之后列表中出现的元素是否已经存储在哈希表中。

# -*- coding:utf-8 -*-
class Solution:
    # 返回对应char,使用一个队列和一个哈希表
    # 队列的先入先出特性,保证了可以保存多个出现一次的字符
    def __init__(self):
        self.queue = []
        self.dict = {}
        
    def FirstAppearingOnce(self):
        # 弹出出现多次的字符
        while len(self.queue)>0 and self.dict[self.queue[0]] !=1:
            self.queue.pop(0)
        # 在剩下的队列中找到结果
        if len(self.queue)==0:
            return '#'
        else:
            return self.queue[0]
        
    def Insert(self, char):
        # 将字符加入队列并更新字典
        if char not in self.dict:
            self.queue.append(char)
            self.dict[char] = 1
        else:
            self.dict[char] = 2

面试题56:链表中环的入口结点

给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

思路梳理

假设入口结点距离头结点 a(图中的H) 个单位,fast和slow相遇在 X,距离入口结点 E 有 b 个单位的位置,环剩下的长度为c,
则有 slow的步数=fast的步数即 a+b+c+b = 2*(a+b) ,则可以推导出 -> a = c 。

  • 所以在找到重合点之后, slow所走的剩下步数 c 等于 从head开始到环起点的距离 a。
    假设 fast 走了n 个loops:a+b=nL => a = nL - b
    图示
class Solution(object):
    def detectCycle(self, head):
        # 已经判断了是否存在head为空的情况
        try:
        # 找到是否有环
            fast = head.next
            slow = head
            while fast is not slow:
                fast = fast.next.next
                slow = slow.next
        except:
            # if there is an exception, we reach the end and there is no cycle
            return None
        
        # 找到一个重合点之后
        # since fast starts at head.next, we need to move slow one step forward
        slow = slow.next
        while head != slow:
            head = head.next
            slow = slow.next
        return head
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值