forked from srishilesh/Data-Structure-and-Algorithms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrotation_array.py
98 lines (80 loc) · 1.7 KB
/
rotation_array.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# https://www.geeksforgeeks.org/array-rotation/
# MY APPROACH
# Time: O(n)
# Space: O(d)
def rotate_array(arr,d,n):
x = []
m = 0
for i in arr:
if(m<d):
x.append(arr[m])
m = m + 1
for i in range(0,len(arr)-1):
if(i+d<n):
temp = arr[i+d]
arr[i] = temp
for i in x:
arr[n-d] = i
d = d - 1
return arr
# APPROACH 1
# ROTATE LEFT BY ONE
# Time: O(n*d)
# Space: O(1)
def rotate_array(arr,d,n):
for i in range(d):
arr = left_rotate(arr,n)
return arr
def left_rotate(arr,n):
temp = arr[0]
for i in range(n-1):
arr[i] = arr[i+1]
arr[n-1] = temp
return arr
def main():
n = int(input("Enter the size: "))
arr = []
for i in range(n):
x = int(input())
arr.append(x)
d = int(input("Search: "))
y = rotate_array(arr,d,n)
print(y)
if __name__ == '__main__':
main()
# APPROACH 3
# ROTATING BLOCKS BY REVERSING
def block_swap(arr,d,n):
a = arr[:d]
b = arr[d:n]
a.reverse()
b.reverse()
c = a+b
c.reverse()
print(c)
def reverseArray(arr,start,end):
while(start<end):
temp = arr[start]
arr[start] = arr[end]
arr[end] = temp
start+=1
end-=1
return arr
def rotateArray(arr,d,n):
if d==0:
return
reverseArray(arr,0,d-1)
reverseArray(arr,d,n-1)
reverseArray(arr,0,n-1)
def main():
size = int(input("Enter size: "))
d = int(input("Enter value of d: "))
arr = []
for i in range(size):
x = int(input())
arr.append(x)
#block_swap(arr,d,size)
rotateArray(arr,d,size)
print(arr)
if __name__=="__main__":
main()