经典逻辑编程题(本文用python实现)

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:从左下角元素往上查找,右边元素是比这个元素大,上边是的元素比这个元素小。于是,target比这个元素小就往上找,比这个元素大就往右找。如果出了边界,则说明二维数组中不存在target元素。

array= [[1,2,3],[2,3,4],[3,4,5]]
def find_item(item,array):cols = len(array[0]) - 1rows = len(array) - 1i = rows j = 0while j <= cols and i >= 0 :if item > array[i][j]:j += 1elif item <  array[i][j]:i -= 1else:return Truereturn False
二维列表第一个数字相加生成一个新列表e
k = [[1],[1, 2],[1, 2, 3],[1, 2, 3, 4]]
e = []
for i in range(len(k[-1])):num = 0for L in k :if len(L) > i:num +=L[i]e.append(num)
print(e)
二维列表旋转90度
a = [[1,2,3],[3,4,5],[2,3,5]]
b = []
for i in range(len(a)):c = []for L in a:c.insert(0, L[i]) # 插入到c的第一个元素之前b.append(c)
print(b)
b=[[2, 3, 1], [3, 4, 2], [5, 5, 3]]
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

思路:转成列表,循环遍历下标替换即可,还可以直接用a = replace(' ', '%20')

   def replaceSpace(self, s):a = list(s)for i in range(len(a)):if a[i] == ' ':a[i] = '%20'  return ''.join(a)
在一个先增长后减小的数组中找到最大值

思路:二分法算法的应用,先找到中间值,如果前一个和一个都比这个值小,则这个值就是最大值

A = [1,2,3,4,5]
B = [9,4,3,2,1]
C = [1,2,3,4,3,2,1]
def peek_point(A):start = 0end = len(A)-1while start <= end:mid = (start + end) // 2try: # 一直递增a=A[mid+1]except:return A[-1]try: # 一直递减b=[mid-1]except:return A[0]if A[mid-1] < A[mid] > A[mid+1]: # 先递增后递减return A[mid]elif A[mid] >= A[mid-1]:start = mid + 1else:end = midprint(peek_point(A))
print(peek_point(B))
print(peek_point(C))
一个有正有负的数组中,求出一个连续子数组和是最大的值(注意:任意元素个数组成的连续的子数组)

思路:求出所有子序列,开始下标可以是0~len(arr)-1,结束下标可以是1~len(arr)(此代码可优化,各位大佬可以帮想一下)

def find_big(arr):zlist=[]for i in range(0, len(arr)):for j in range(i,len(arr)):num = zlist.append(sum(arr[i:j+1]))return max(zlist)
print(find_big([1,-2,-3,4,3,-1,2])) # --》8
对字符串a=‘abc’进行随意组合成不同顺序的字符串,例如acb,bac…6种组合方式
a='abc'
[(i+j+m) for i in a for j in a for m in a if i != j and j !=m and i!=m]
对字典列表按年龄进行倒序排序d_list = [{'name':'a','age':18},....]
d_list.sort(key=lambda x:x['age'],reverse = True)
如何将一个可迭代对象的每个元素变成一个字典的所有键?
{}.fromkeys(['jim','han'],21) # output:{'jim': 21, 'han': 21}
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:斐波那契数列

fib = lambda n: n if n <=2 else fib(n-1) + fib(n-2)
一只青蛙一次可以跳上1级台阶,也可跳2级。还可跳n级台阶,求该青蛙跳上一个n级的台阶总共有多少种跳法。
fib = lambda n:n if n < 2 else fib(n-1)*2
实现删除一个 L1=[1,2,3,3,2]里面的重复元素,保证原序
L2 = list(set(L1))
L2.sort(key = L1.index)
# 使用列表生成时 append
L2 = []
[L2.append(i) for i in L1 if i not in L2]
合并两个有序列表
def loop_merge_sort(l1, l2):tmp = []while len(l1) > 0 and len(l2) > 0:if l1[0] > l2[0]:tmp.append(l2[0])del l2[0] # 列表删除时间复杂度大else:tmp.append(l1[0])del l1[0]tmp.extend(l1)tmp.extend(l2)return tmp
# 不删除元素,采用归并a = [1,2,3,4] 、 b = [5,6,7]
def merge(a,b):L,R=0,0slist=[]while L < len(a) and R < len(b):if a[L] > b[R]:slist.append(b[R])R +=1else:slist.append(a[L])L +=1slist+=a[L:]slist+=b[R:]return slist
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = Noneclass Solution:# 返回从尾部到头部的列表值序列,例如[1,2,3]def printListFromTailToHead(self, listNode):l = []head = listNodewhile head:l.insert(0, head.val)head = head.nextreturn l
实现一个二叉树,有add添加节点方法,前中后序遍历,层次遍历
class Node(object):def __init__(self,elem=-1, lchild=None, rchild=None):self.elem = elemself.lchild = lchildself.rchild = rchild
class Tree(object):def __init__(self,root=None):self.root = rootdef add(self,elem):node = Node(elem)if self.root == Noneself.root = nodeelse:queue = []queue.append(self.root)# 往队列添加跟节点# 对已有的节点进行层次遍历while queue:cur = queue.pop(0)if cur.lchild == None:cur.lchild = nodereturnelif cur.rchild == None: cur.rchild = nodereturnelse:#如果左右子树都不为空,加入队列继续判断queue.append(cur.lchild)queue.append(cur.rchild)def q_order(self, root):'''先序遍历'''if root == None:returnprint(root.elem)self.q_order(root.lchild)self.q_order(root.rchild)def z_order(self,root):'''中序遍历print语句放在中间'''def h_order(self,root):'''后续遍历同理放在后面'''def breadth_travel(self):"""利用队列实现树的层次遍历"""if root == None:returnqueue = []queue.append(root)while queue:node = queue.pop(0)print(node.elem) # 先打印跟节点if node.lchild != None:queue.append(node.lchild)if node.rchild != None:queue.append(node.rchild)
文件操作

文件操作题

def ws(id,name):stu = str(id) + ','+name+'\n'with open('d.txt','a+',encoding='utf8') as f:f.seek(0) # 移动坐标到文件开头contents = f.readlines()flag = Falsefor i, c in enumerate(contents):y_id = c.rstrip().split(',')[0]if id == int(y_id): # 发现第i行重复的id,那就更改这行的内容contents[i] = stuflag = Trueif not flag: # 如果没找到重复的id,直接追加到文件尾部f.write(stu)if flag: # 如果读到的内容被更改了,覆盖源文件,写入新数据with open('d.txt','w',encoding='utf8') as f2:f2.write(''.join(contents))
实现一个链表的append和printl方法

链表操作

class LinkNode(object):'''实现一个节点类'''def __init__(self, x):self.val = xself.next = None
class LinkedList(object):'''实现链表类'''def __init__(self):self._head = Nonedef is_empty(self):return self._head == Nonedef append(self,x):node = LinkNode(x)if self.is_empty():self._head = nodeelse:cur	 = self._headwhile cur.next != None: # 找出cur = cur.nextcur.next = nodedef printl(self):'''遍历打链表'''cur = self._headwhile cur != None:print(cur.val,end='')cur = cur.next
l = LinkedList()
l.append('abc')
l.append('xyz')
l.printl()
# 常用的链表方法
class SingleLinkList(object):"""单链表"""def __init__(self):self.__head = Nonedef is_empty(self):"""判断链表是否为空"""return self.__head == Nonedef length(self):"""链表长度"""# cur初始时指向头节点cur = self.__headcount = 0# 尾节点指向None,当未到达尾部时while cur != None:count += 1# 将cur后移一个节点cur = cur.nextreturn countdef travel(self):"""遍历链表"""cur = self.__headwhile cur != None:print cur.item,cur = cur.nextprint ""def add(self, item):"""头部添加元素"""# 先创建一个保存item值的节点node = SingleNode(item)# 将新节点的链接域next指向头节点,即_head指向的位置node.next = self.__head# 将链表的头_head指向新节点self.__head = nodedef append(self, item):"""尾部添加元素"""node = SingleNode(item)# 先判断链表是否为空,若是空链表,则将_head指向新节点if self.is_empty():self.__head = node# 若不为空,则找到尾部,将尾节点的next指向新节点else:cur = self.__headwhile cur.next != None:cur = cur.nextcur.next = nodedef insert(self, pos, item):"""指定位置添加元素"""# 若指定位置pos为第一个元素之前,则执行头部插入if pos <= 0:self.add(item)# 若指定位置超过链表尾部,则执行尾部插入elif pos > (self.length()-1):self.append(item)# 找到指定位置else:node = SingleNode(item)count = 0# pre用来指向指定位置pos的前一个位置pos-1,初始从头节点开始移动到指定位置pre = self.__headwhile count < (pos-1):count += 1pre = pre.next# 先将新节点node的next指向插入位置的节点node.next = pre.next# 将插入位置的前一个节点的next指向新节点pre.next = nodedef remove(self,item):"""删除节点"""cur = self.__headpre = Nonewhile cur != None:# 找到了指定元素if cur.item == item:# 如果第一个就是删除的节点if not pre:# 将头指针指向头节点的后一个节点self.__head = cur.nextelse:# 将删除位置前一个节点的next指向删除位置的后一个节点pre.next = cur.nextbreakelse:# 继续按链表后移节点pre = curcur = cur.nextdef search(self,item):"""链表查找节点是否存在,并返回True或者False"""cur = self.__headwhile cur != None:if cur.item == item:return Truecur = cur.nextreturn False
判断一个单链表是否有环

思路:快慢两个游标都从head开始,快游标依次移动2步,慢移动1步,如果有环,总会相遇

def exist_h(linkList):p1 = p2 = linkList  # 指针指向头结点while p2 and p2.next:  # 当链表为空,或者没有下一个节点时,表示没有环p1 = p1.next  # 一次移动一步p2 = p2.next.next  # 一次移动两步if p1 == p2:  # 如果两个游标相交,那么说明有环return Truereturn Falseif __name__ == '__main__':l = LinkNode(1) # 头结点l1 = LinkNode(2)l2 = LinkNode(3)l3 = LinkNode(4)l4 = LinkNode(5)# 组成一条链l.next = l1l1.next = l2l2.next = l3l3.next = l4l4.next = l2 # l4结点指向l2结点,有环print(exist_h(l)) # 返回 True

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CoreData简介

一、概念 1.Core Data 是数据持久化存储的最佳方式 2.数据最终的存储类型可以是&#xff1a;SQLite数据库&#xff0c;XML&#xff0c;二进制&#xff0c;内存里&#xff0c;或自定义数据类型 3.好处&#xff1a;能够合理管理内存&#xff0c;避免使用sql的麻烦&#xff0c;高效…

NSZombieEnabled使用

我们做iOS 程序开发时经常用遇到 EXC_BAD_ACCESS 错误导致 Crash&#xff0c;出现这种错误时一般 Xcode 不会给我们太多的信息来定位错误来源&#xff0c;只是在应用 Delegate 上留下像Thread 1: Program received signal:"EXC_BAD_ACCESS"&#xff0c;让问题无从找起…

通过终端,查看sqlite3的存储文件

在调试应用的时候&#xff0c;可以查看数据库里的数据。 1、定位到模拟器的目录 cd ~/Library/Application\ Support/iPhone\ Simulator 2、查找文件名包含 OrgChart.sqlite的文件&#xff0c;并打印路径 find . -name "OrgChart.sqlite" –print 输出&#xff1a; .…

iOS的事件分发

移动平台上的开发主要关注数据以及数据的处理&#xff0c;事件的处理以及UI。所以事件的分发处理是很重要的一个环节&#xff0c;对于一个平台的优劣来说也是一项重要的参数。如果事件的分发设计的不好&#xff0c;一些复杂的UI场景就会变得很难写甚至没法写。从小屏没有触摸的…

iOS开发ARC入门和使用

本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容&#xff0c;仅用于技术交流和讨论。请不要将本文的部分或全部内容用于商用&#xff0c;谢谢合作。 欢迎转载本文&#xff0c;但是转载请注明本文出处&#xff1a;http://www.onevcat.com/2012/06/arc-hand-by-han…

UIBezierPath 的使用介绍

使用UIBezierPath类可以创建基于矢量的路径。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状&#xff0c;如椭圆或者矩形&#xff0c;或者有多个直线和曲线段组成的形状。1.Bezier Path 基础UIBezierPath对象是CGPathRef数据类型的封装。path如果是基…

iOS中的XML解析

解析方式分类: 解析 XML 通常有两种方式&#xff0c;DOM 和 SAX&#xff1a;DOM解析XML时&#xff0c;读入整个XML文档并构建一个驻留内存的树结构&#xff08;节点树&#xff09;&#xff0c;通过遍历树结构可以检索任意XML节点&#xff0c;读取它的属性和值。 iOS中XML解析是…

iOS中bundle的使用

一、概述1.在我们使用第三方框架时&#xff0c;常常看到XXX.bundle的文件。我们找到该文件&#xff0c;显示包内容&#xff0c;大致看到很多资源文件&#xff1a;图片、配置文本、XIB文件……2.什么是Bundle文件&#xff1a;简单理解&#xff0c;就是资源文件包。我们将许多图片…

CoreData 自定义数据类型

在CoreData中&#xff0c;Entity中Attribute的类型只有固定的几种可选。如下图&#xff1a; 如果我们要想直接存放UIImage到数据库&#xff0c;如何做&#xff1f; 1.在coredata中新建的attribute中类形选择Transformable. 意思表示这个字段是自定义的类型。 2.在生成的NSMana…

CoreData并发操作模式简介

iOS5.0中&#xff0c;苹果为CoreData的并发处理添加了两个内容。一、首先介绍第一个内容&#xff1a;CoreData框架中的NSManagedObjectContext类增加新的初始化方法&#xff1a;initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct;1.参数方法介绍&#xff1a;…

【Linux系统基础】(3)在Linux上部署运维监控Zabbix和Grafana

目录 运维监控Zabbix部署简介安装安装前准备 - Mysql安装Zabbix Server 和 Zabbix Agenta. 安装Zabbix yum库b. 安装Zabbix Server、前端、Agentc. 初始化Mysql数据库d. 为Zabbix Server配置数据库e. 配置Zabbix的PHP前端 配置zabbix 前端&#xff08;WEB UI&#xff09; 运维监…

HashMap源码解释

HashMap 前言: 本文的hashMap是基于jdk1.7的hashMap. 关于jdk1.8的hashMap在另一篇中,那里将会介绍与1.7的差异与优势 首先基础知识介绍: 1.HashMap的成员变量   int DEFAULT_INITIAL_CAPACITY 16&#xff1a;默认的初始容量为2 ^ 4   int MAXIMUM_CAPACITY 1 <<…

MagicRecord For IOS 简介

一、概述 MagicalRecord 灵感来自于简洁的Ruby语言中 Rails Active Record 查询方式. MagicalRecord 这个开源库的核心思想是: 1.清除 Core Data 相关的代码2.简洁的清除,简单的一行搜索记录的功能3.当然允许使用NSFetchRequest,当存在着复杂的搜索条件时 二、使用 1. 导入框架…

对象引用 String引用 基本类型引用 差别

最近遇到一个线上问题,原因是忽略的引用的一些语法,导致出错,现在记录一下: Testpublic void testList(){List<String> list new ArrayList<String>();list.add("1");list.add("2");list.add("3");List<String> list2 new …

ReactiveCocoa入门

概述 为什么要使用RAC&#xff1f;一个怪怪的东西&#xff0c;从Demo看也没有让代码变得更好、更短&#xff0c;相反还造成理解上的困难&#xff0c;真的有必要去学它么&#xff1f;相信这是大多数人在接触RAC时的想法。RAC不是单一功能的模块&#xff0c;它是一个Framework&am…

C++和Objective-C混编(官方文档翻译)

苹果的Objective-C编译器允许用户在同一个源文件里自由地混合使用C和Objective-C&#xff0c;混编后的语言叫Objective-C。有了它&#xff0c;你就可以在Objective-C应用程序中使用已有的C类库。 Build Setting中要设定编译文件类型设置&#xff0c;如下图&#xff1a;Objectiv…

Create groups 与 Create folder references的区别

选择了Create groups方式添加了一个文件&#xff0c;我们会发现被添加进来的文件&#xff0c;文件夹是黄色的。选择了 Create folder references方式添加进来的文件的文件夹是蓝色的。那么两种方式有什么区别呢&#xff1f; 1.使用Create groups 为任何新增加的文件夹创建组&a…

React Native新手引导

序言 本教程希望让您快速熟悉使用React Native来编写iOS和Android App的技巧。如果你希望知道React Native是什么以及为什么Facebook打造了它&#xff0c;可以读读这篇博文 我们这里假设你已经有了使用React编写Web应用程序的经验。如果还没有&#xff0c;建议你可以先从React官…

服务器启动报错:One or more listeners failed to start. Full details will be found in the ...

idea本地启动web项目时 报错如下: One or more listeners failed to start. Full details will be found in the appropriate container log file 我的解决方案: 增加一步,配置artifacts 具体如下: 这个地方选择自己本地的web项目文件夹 都配置完然后Apply下,这个都配置好…

React Native使用指南-使用链接库

并不是所有的APP都需要使用全部的原生功能&#xff0c;包含支持全部特性的代码会增大应用的体积。但我们仍然希望能让你简单地根据自己的需求添加需要的特性。 在这种思想下&#xff0c;我们把许多特性都发布成为互不相关的静态库。 大部分的库只需要拖进两个文件就可以使用了&…