Leetcode 75.颜色分类
1.问题描述
2.解决方案
1.这是一道排序题,难处在于如何优雅的排序,大致思想就是小的往前换,然后最终就是有序了,也可以双指针,本题采用单指针,然后用head维护要更新的地方,其实说实话也类似双指针,因为head是一个指针,遍历算第二个指针
2.抽象一下思想就是双指针,一个指针选取,一个指针更新
class Solution {
public void sortColors(int[] nums) {
int n=nums.length;
int head=0;
//1.第一圈把0换到数组前面
for(int i=0;i<n;i++){
if(nums[i]==0){
int temp=nums[i];
nums[i]=nums[head];
nums[head]=temp;
head++;
}
}
//2.第二圈把1换到0后面 其实就是head以后的数组中
for(int i=head;i<n;i++){
if(nums[i]==1){
int temp=nums[i];
nums[i]=nums[head];
nums[head]=temp;
head++;
}
}
}
}
HJ3.明明的随机数
1.问题描述
2.解决方案
解法一:去重/排序
1.去重
2.排序
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
//去重
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Set<Integer> set = new HashSet<>();
for(int i=0;i<n;i++){
set.add(in.nextInt());
}
//排序
ArrayList<Integer> list = new ArrayList<>(set);
Collections.sort(list);
for(Integer item : list){
System.out.println(item);
}
}
}
解法二:桶排
数组index为对应数字,先统计一遍然后扫描一遍即可。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int num = scanner.nextInt();
int[] arr = new int[1001];
for (int i = 0; i < num; i++) {
int n = scanner.nextInt();
arr[n] = 1;
}
for (int i = 1; i < arr.length; i++) {
if (arr[i] == 1) {
System.out.println(i);
}
}
}
}