小摩有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的小摩只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)
输出一行操作数
4 19 7 8 25
2
19放到最后,25放到最后,两步完成从小到大排序
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] arr =new int[n]; for(int i = 0;i<n;i++){ arr[i] = sc.nextInt(); } int min = Integer.MAX_VALUE; int count = 0; for(int i = 0;i<n;i++){ for(int j = i+1;j<n;j++){ if(arr[j] < arr[i]){ count++; min = arr[i] < min?arr[i]:min; break; } } } if(count == 0){ System.out.println(count); } else{ int k = n-1; while(k>0){ if(arr[k] > min && arr[k] > arr[k-1]){ count++; k--; } else break; } System.out.println(count); } } }
n = int(input()) l = list(map(int, input().split())) flag = [False] * len(l) for i in range(len(l) - 1): for j in range(i + 1, len(l)): if l[j] < l[i]: flag[i] = True break for i in range(0, len(l) - 1): if l[i] < l[-1] and flag[i] == True: flag[-1] = True print(flag.count(True))
#include <iostream> #include <vector> using namespace std; int main(){ int n; cin>>n; vector<int> vi; for(int i=0;i<n;i++){ int x; cin>>x; vi.push_back(x); } int count=0; vector<int> v; for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(vi[j]<vi[i]){ count++; v.push_back(vi[i]); break; } } } for(int i=0;i<v.size();i++){ if(vi[n-1]>v[i]){ count++; break; } } cout<<count<<endl; return 0; }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = scanner.nextInt(); int[] arr = new int[N]; int max = Integer.MIN_VALUE; for (int i = 0; i < N; i++) { arr[i] = scanner.nextInt(); if (arr[i] > max) { max = arr[i]; } } int count = 0 ; boolean flag = false ; // 有没有数学移动到最后 for (int i = 0; i < arr.length - 1; i++) { boolean tmp = needMove(arr, i); if (tmp) { flag = true; count++; } } // 判断最后一位需不需要移动 if(flag){ // 不是最大的不需要移动 boolean flag1 = true ; if (arr[arr.length - 1] == max) { // 如果是最大的,还取决于前面有没有最大值 3 2 3 ; 移动一次即可 for (int i = 0; i < arr.length - 1; i++) { if (arr[i] == max) { flag1 = false; break; } } if (flag1) { count++; } } } System.out.println(count); } private static boolean needMove(int[] arr, int i) { for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[i]) { return true; } } return false; } }
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.util.Arrays; public class Main{ public static void main(String[] args) throws IOException{ BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(br.readLine()); int[] a=new int[n]; int[] b=new int[n]; String[] line=br.readLine().split(" "); for(int i=0;i<n;i++){ a[i]=Integer.parseInt(line[i]); b[i]=a[i]; } Arrays.sort(b); int start=0; for(int i=0;i<n;i++){ int next=search(a,b[i],start); if(next==n){ System.out.println(n-i); return; } start=next+1; } System.out.println(0); } private static int search(int[] a,int target,int start){ for(int i=start;i<a.length;i++){ if(a[i]==target){ return i; } } return a.length; } }