5428. 重新排列数组
思路:按照题目重新排列即可。
class Solution {
public int[] shuffle(int[] nums, int n) {
n=n*2;
int[] ans=new int[n];
for(int i=0;i<n;i+=2) {
ans[i]=nums[i/2];
ans[i+1]=nums[n/2+i/2];
}
return ans;
}
}
5429. 数组中的 k 个最强值
思路:我们可以重载排序规则,从而完成本题的要求。
class Solution {
int mid;
class node implements Comparable<node>{
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<n;i++)
a[i]=new node(arr[i]);
Arrays.parallelSort(a);
int[] ans=new int[k];
for(int i=0;i<k;i++)
ans[i]=a[i].x;
return ans;
}
}
5430. 设计浏览器历史记录
思路:定义两个栈,第一个栈用来存储浏览记录,当操作者后退时,将后退位置之前的记录存入第二个栈中,记得当执行visit操作时清空第二个栈即可。
class BrowserHistory {
Stack<String> 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;
}
}