第 192 场力扣周赛题解

5428. 重新排列数组

思路:按照题目重新排列即可。

class Solution {
    public int[] shuffle(int[] nums, int n) {
    	
    	n=n*2;
    	int[] ans=new int[n];
    	
    	for(int i=0;i

5429. 数组中的 k 个最强值

思路:我们可以重载排序规则,从而完成本题的要求。

class Solution {
	
	int mid;
	class node implements Comparable{
		int x;
		public node(int x) {
			this.x=x;
		}
		@Override
		public int compareTo(node o) {
			// TODO 自动生成的方法存根
			if(Math.abs(x-mid)==Math.abs(o.x-mid))
				return o.x-x;
			return Math.abs(o.x-mid)-Math.abs(x-mid);
		}
		
	}
	
    public int[] getStrongest(int[] arr, int k) {
    	
    	int n=arr.length;
    	node[] a=new node[n];
    	
    	Arrays.parallelSort(arr);
    	
    	mid=arr[(n-1)/2];
    	
    	for(int i=0;i

5430. 设计浏览器历史记录

思路:定义两个栈,第一个栈用来存储浏览记录,当操作者后退时,将后退位置之前的记录存入第二个栈中,记得当执行visit操作时清空第二个栈即可。

class BrowserHistory {
	
	Stack st1,st2;

    public BrowserHistory(String homepage) {
    	st1=new Stack<>();
    	st2=new Stack<>();
    	st1.add(homepage);
    }
    
    public void visit(String url) {
    	st1.add(url);
    	st2.clear();
    }
    
    public String back(int steps) {
    	
    	int num=steps;
    	while(!st1.isEmpty() && num>0) {
    		num--;
    		st2.add(st1.pop());
    	}
    	if(st1.isEmpty())
    		st1.add(st2.pop());
    	return st1.peek();
    }
    
    public String forward(int steps) {
    	
    	int num=steps;
    	while(!st2.isEmpty() && num>0) {
    		num--;
    		st1.add(st2.pop());
    	}
    	return st1.peek();
    }
}

5431. 给房子涂色 III

思路:定义dp[i][j][k][i][j][k]表示前j个房子组成i个街区并且第j个房子颜色为k时的最小话花费。

class Solution {
    public int minCost(int[] houses, int[][] cost, int m, int n, int target) {
    	
    	int[][][] dp=new int[target+1][m+1][n+1];
    	
    	for(int i=0;i<=target;i++)
    		for(int j=0;j<=m;j++)
    			for(int k=0;k<=n;k++)
    				dp[i][j][k]=5000005;
    	
    	dp[0][0][0]=0;
    	
    	for(int j=1;j<=m;j++)
    		for(int i=1;i<=Math.min(j, target);i++) {
    			for(int k=1;k<=n;k++)
    				for(int h=0;h<=n;h++) {
    					if(houses[j-1]!=0 && houses[j-1]!=k)
    						continue;
    					if(j>1 && houses[j-2]!=0 && houses[j-2]!=h)
    						continue;
    					int val=(houses[j-1]==0?cost[j-1][k-1]:0);
    					if(k==h)
    						dp[i][j][k]=Math.min(dp[i][j][k], dp[i][j-1][h]+val);
    					else
    						dp[i][j][k]=Math.min(dp[i][j][k], dp[i-1][j-1][h]+val);
    					//if(i==3 && j==3 && k==1)
    					//System.out.println(dp[i][j][k]+" "+i+" "+j+" "+k+" "+cost[j-1][k-1]);
    				}
    		}
    	
    	int ans=5000005;
    	for(int i=0;i<=n;i++)
    		ans=Math.min(ans, dp[target][m][i]);
    	
    	return ans==5000005?-1:ans;
    }
}

 

你可能感兴趣的:(第 192 场力扣周赛题解)