第一行输入一个整数
表示数组的长度。
第二行输入
个整数
表示数组元素。
在一行上输出一个整数,代表最少操作次数。
4 19 7 8 25
2
对于第一组样例:
第一次操作,将
移动到末尾,数组变为
;
第二次操作,将
移动到末尾,数组变为
,此时数组严格递增。
因此答案为
。
# 解题思路: # 首先将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; }