小摩有一个N个数的数组,他想将数组从小到大 排好序,但是萌萌的小摩只会下面这个操作:
任取数组中的一个数然后将它放置在数组的最后一个位置。
问最少操作多少次可以使得数组从小到大有序?
首先输入一个正整数N,接下来的一行输入N个整数。(N <= 50, 每个数的绝对值小于等于1000)
输出一行操作数
4 19 7 8 25
2
19放到最后,25放到最后,两步完成从小到大排序
# 解题思路: # 首先将a排序,变为b # 然后查看a中有多少是按照b中由小到大的顺序排列的 # 举例:a=[1,5,2,6,3,7,4] b=[1,2,3,4,5,6,7] # 这时a中 1 2 3 4 为按照b中由小到大排序 # 若要将a变为b,只需依次移动5 6 7 到数列的末尾 num=int(input()) a=list(map(int,input().split())) b=sorted(a) j=0 count=0 for i in range(len(a)): if a[i] == b[j]: j+=1 count+=1 print(len(b)-count)
import java.util.*; public class Main { public static void main(String[] args) { Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nextInt(); int[]data=new int[n]; for(int i=0;i<n;i++) data[i]=scan.nextInt(); System.out.println(get(data)); } } public static int get(int[]data){ int[] copy=new int[data.length]; System.arraycopy(data,0,copy,0,data.length); Arrays.sort(copy); int n=data.length; int max=0; int i=0; int j=0; for(;i<n&&j<n;){ if(data[i]!=copy[j]){ i++; }else{ i++; j++; } } return n-j; } }
def solve(num): x = num.index(min(num)) stack = [num[x]] while x<len(num): if num[x]>=stack[-1]: stack.append(num[x]) x += 1 return len(num)-len(stack)+1 if __name__=='__main__': n = int(raw_input().strip()) num = list(map(int,raw_input().split())) print(solve(num))
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; /** * @author wylu */ 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()); String[] strs = br.readLine().split(" "); int[] a = new int[n]; int[] b = new int[n]; for (int i = 0; i < n; i++) { a[i] = Integer.parseInt(strs[i]); b[i] = a[i]; } Arrays.sort(b); int count = 0; for (int i = 0, j = 0; i < a.length; i++) { if (a[i] == b[j]) { count++; j++; } } System.out.println(a.length - count); } }
#include <bits/stdc++.h> using namespace std; int main() { int z; cin >> z; vector<int> v1, v2; while (z--) { int x; cin >> x; v1.push_back(x); v2.push_back(x); } sort(v2.begin(), v2.end()); int l1 = 0, l2 = 0, index = 0; while (l1 < v2.size()) { if (v1[l1] == v2[l2]) { l1++; l2++; index++; } else l1++; } cout << v1.size() - index; }
#include<iostream> #include<vector> #include<algorithm> using namespace std; int main(){ int n; cin>>n; vector<pair<int,int>>arr; int k=0; while(n!=0){ int curnum; cin>>curnum; arr.push_back(make_pair(curnum,k++)); --n; } sort(arr.begin(),arr.end()); int count=1; while(n+1<arr.size()&&arr[n+1].second>arr[n].second){ count++; ++n; } cout<<arr.size()-count; return 0; }