Left Rotate by d
1. By d*o(n) time complexity
// Online C++ compiler to run C++ program online
#include <iostream>
#include <climits>
using namespace std;
int remove_duplicate(int* arr, int n){
int res=0;
int i=0;
while(i<=n){
if(arr[i]!=0){
arr[res]=arr[i];
res++;
}
i++;
}
for(int i=res;i<n;i++){
arr[i]=0;
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
return n;
}
void left(int*arr,int n){
int temp=arr[0];
for (int i=0;i<n-1;i++){
arr[i]=arr[i+1];
}
arr[n-1]=temp;
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
void left_d(int *arr, int n, int d){
while (d>1){
left(arr,n);
d--;
}
}
int main() {
int arr[50]={10,0,20,0,30,0,50};
int n=7;
int d=3;
left_d(arr,n,d);
return 0;
}
2. By taking o(n) extra space
// Online C++ compiler to run C++ program online
#include <iostream>
#include <climits>
using namespace std;
int remove_duplicate(int* arr, int n){
int res=0;
int i=0;
while(i<=n){
if(arr[i]!=0){
arr[res]=arr[i];
res++;
}
i++;
}
for(int i=res;i<n;i++){
arr[i]=0;
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
return n;
}
void left(int*arr,int n){
int temp=arr[0];
for (int i=0;i<n-1;i++){
arr[i]=arr[i+1];
}
arr[n-1]=temp;
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
void left_d(int *arr, int n, int d){
int arr2[n];
for(int i=0;i<n;i++){
arr2[i]=arr[i];
}
for(int i=0;i<d;i++){
arr[n-d+i]=arr2[i];
}
for(int i=d;i<n;i++){
arr[i-d]=arr2[i];
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main() {
int arr[50]={10,0,20,0,30,0,50};
int n=7;
int d=3;
left_d(arr,n,d);
return 0;
}
3. o(n) time complexity and o(1) space:
3 time rev algo
// Online C++ compiler to run C++ program online
#include <iostream>
#include <climits>
using namespace std;
int remove_duplicate(int* arr, int n){
int res=0;
int i=0;
while(i<=n){
if(arr[i]!=0){
arr[res]=arr[i];
res++;
}
i++;
}
for(int i=res;i<n;i++){
arr[i]=0;
}
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
return n;
}
void left(int*arr,int n){
int temp=arr[0];
for (int i=0;i<n-1;i++){
arr[i]=arr[i+1];
}
arr[n-1]=temp;
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
void rev(int *arr, int l, int h){
while(l<h){
swap(arr[l],arr[h]);
l++;
h--;
}
}
void left_d(int *arr, int n, int d){
rev(arr,0,d-1);
rev(arr,d,n-1);
rev(arr,0,n-1);
for(int i=0;i<n;i++){
cout<<arr[i]<<" ";
}
cout<<endl;
}
int main() {
int arr[50]={10,0,20,0,30,0,50};
int n=7;
int d=3;
left_d(arr,n,d);
return 0;
}
Comments
Post a Comment