Xiaobaiダブルポインター問題に適したPythonアルゴリズム

まず、配列のマージ

1.アナログポインターを使用して2つの順序付けられた配列を組み合わせる

# 使用指针合并两个数组
arr1 = [1,3,4,6,7] 
arr2 = [2,5,8,9,10]
#定义两个有序数组,并初始化赋值
ind = 0
# ans比较时的角标
ans = arr1.copy()
#ans 排序结果初始化为arr1

for i in range(0,len(arr2)):
	while ind < len(arr1):
		if arr2[i]<= arr1[ind]: #范围小于数组的元素下标的最大值
			ans.insert(ind + i ,arr2[i]) #向第一非数组中插入第二个数组中的数字
			break #跳出当前循环
		else:
			ind +=1  #ind指向的数字小于i指向的数字,ind向后移动一位

	else:
		ans =ans +arr2[i:] #ans加上arr2中剩余的元素
		break
print(ans,type(ans))
#输出结果: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] <class 'list'>

2.アナログポインターの説明:

- 指针:内存空间变量,可以通过一个数组中的没个元素的下标找出它的值,
即存储这个元素位置的变量可以看作一个指针,即python中模拟指针问题
- 实例中 ind是存储数组中数值的下角标的变量,ans用于存储排序完成后数组中的变量
- 使用for循环是因为同一个数字前面可能插入两个及以上的数字,
- python中的数组和列表时一个概念,我们这里不区分,

二、二分法(半探索法)

1.順序付けられた配列の二分探索

# 有序数组的二分法查找
number = [1,2,3,4,5,6,7,8,9,10,11,12]
#初始化定义一个数组
head = 0  #定义指针头
tail =len(number) #定义指针的尾
#数组的长度是最大下标数加1
search = int(input('请输入要搜索的数字:'))
while  tail - head >1:
	mid = (head + tail ) // 2  #通过整除,找出中间角标 
	if search < number[mid]:
		tail =mid
	if  search > number[mid]:
		head= mid 
	if search == number[mid]:
		ans =mid 
		break
else :
	if search == number[head-1]:
		ans = head
	else :
		ans = -1 	#数组不存在搜索的数字
if ans == -1:
	print(search,'不在数组中')
else:
	print(search,'在数组中的索引位置为:',ans)	


2.二分法の説明

二分法は、半探索法とも呼ばれます。各探索の後、探索範囲は半分になり、探索が終了したときに、探索範囲に残っている数が1つしかない場合は、それが探索された数であるかどうかを判断します。レコード位置である場合は、探索された数でなければこの配列ではなく、

3つのリンクリスト(ダブルリンクリストとシングルリンクリストの違い)

リンクされたリスト:ポインターで接続されたデータを格納するために使用される配列で、最大の利点は、断片化されたメモリ空間を効果的に使用できることです。多くの言語では、配列のサイズは事前に定義する必要があり、定義後にランダムに変更することはできません。配列は同じタイプの変数のみを格納できます。リンクリストを使用すると、配列の長さを変更したり、異なるタイプの要素を同じ配列に格納したりできます。
これはPythonリストと非常によく似ています。実際、リストの動作原理はリンクリストであるため、Python言語にはポインターがありません。ポインターリストを使用してリンクリストを実装します。
単一のリンクリストリンクリストの各要素は、各要素の値を格納するだけではありません。この要素のポインタ値も格納します。この方法でのみ、リンクリストを接続できます。単一リンクリストの各要素には、独自の値と次の番号へのポインタが含まれます。これは、リンクリストの最後の番号には含まれないためです。次の番号なので、そのポインタは空です。
ここに画像の説明を挿入
二重リンクリスト:二重リンクリスト内の要素は、2つのポインターと要素値で構成され、1つのポインターは次の要素を指します。ポインターの要素の二重リンクリストは、インデックスによって返されるトラバースの数に関係なく、双方向でトラバースできます。双方向出力も実現できます。
ここに画像の説明を挿入
:ポインターは次の要素の位置を格納する変数です。Pythonにはポインターが
ありません。リンクリストのシミュレーションにはPythonを使用していません。ここでは、単一リンクリストと二重リンクリストの違いを理解しています。ここでは主に概念を紹介します性的なもの、アルゴリズム知識システム全体を完成させましょう。

82件の元の記事を公開 652のような 60,000以上を 訪問

おすすめ

転載: blog.csdn.net/weixin_42767604/article/details/105455335