1.给你一个数组nums,任意选取两个数字,两个数字之和>=m.
两层for循环就可以了
2.字符串处理:
pre保存上一个字符串
直接利用pre更新当前字符串cur就可以了。
3.小朋友分纸张
看力扣分发糖果135题,这个题比135题多了小朋友成圈首尾相连。
小朋友围成一个圈,年龄大的小朋友要比相邻的年龄下的小朋友的纸张上多(年龄大于,而不包含等于),最多一百个小朋友,最少需要多少张纸张。
正着一轮,反着一轮
public class tangguo135 {
public int candy(int[] ratings) {
int n = ratings.length;
if(n==1){
return 1;
}
//从左到右,小朋友要比左边小朋友的纸张多(如果当前小朋友的年龄更大的话)
int[] dp = new int[n];//第i位小朋友的纸张数
dp[0]=1;
for(int i=1;i<n;i++){
if(ratings[i]>ratings[i-1]){
dp[i]=dp[i-1]+1;
}else{
dp[i]=1;
}
}
//从右到左,小朋友要比右边小朋友的纸张多(如果当前小朋友的年龄更大的话)
int[] right = new int[n];
//如果最后一个孩子的年龄大于第一个孩子的年龄,那么right[n-1]=2;
if(ratings[n-1]>ratings[0]){
right[n-1]=2;
}
right[n-1]=1;
for(int i=n-2;i>=0;i--){
if(ratings[i]>ratings[i+1]){
right[i]=right[i+1]+1;
}else{
right[i]=1;
}
}
int res=0;
for(int i=0;i<n;i++){
res+=Math.max(dp[i],right[i]);
}
return res;
}
public static void main(String[] args) {
}
}
4.航海问题
有水路、陆地、障碍物,三种,水路用0表示,陆地用1表示,障碍物用2表示,水路花销2,陆地花销1,障碍物不可行。
问从起点(0,0)到终点(m-1,n-1),问最小花销。
用dp,dp[i][j]:位置i,j的最小开销。
public class wang04 {
//dp[i][j]:位置ij的最小开销
public int minSailCost (int[][] input) {
// write code here
int maxvalue = 10000;//障碍物节点的开销,这样更新的时候就不会选择从障碍物过了
int m=input.length,n=input[0].length;
int[][] dp = new int[m][n];
dp[0][0]=0;//起点不算开销
for(int j=1;j<n;j++){//第一行只有一种走法
if(input[0][j]==2){//障碍物
dp[0][j] = maxvalue;
}else if(input[0][j]==1){//陆地开销为1
dp[0][j] = dp[0][j-1]+1;
}else if(input[0][j]==0){//水路开销为2
dp[0][j] = dp[0][j-1]+2;
}
}
//第一列的开销
for(int i=1;i<m;i++) {
if(input[i][0]==2){//障碍物
dp[i][0] = maxvalue;
}else if(input[i][0]==1){//陆地,开销为1
dp[i][0] = dp[i-1][0]+1;
}else if(input[i][0]==0){//水路,开销为2
dp[i][0] = dp[i-1][0]+2;
}
}
//dp[i][j]=min(dp[i][j-1],dp[i-1][j])+cost[i][j];
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){//第一行只有一种走法
if(input[i][j]==2){
dp[i][j] = maxvalue;
}else if(input[i][j]==1){//陆地
dp[i][j] = Math.min(dp[i][j-1],dp[i-1][j])+1;
}else if(input[i][j]==0){//水路
dp[i][j] = Math.min(dp[i][j-1],dp[i-1][j])+2;
}
}
}
return dp[m-1][n-1];
}
public static void main(String[] args) {
wang04 ww = new wang04();
ww.minSailCost(new int[][]{{1,1,1,1,0},{0,1,0,1,0},{1,1,2,1,1},{0,2,0,0,1}});
}
}
问答题
列举三种常见的软件开发过程模型,简要叙述各模型的特点
https://blog.youkuaiyun.com/qq_42428269/article/details/100169515
原型法,
快速原型法,
瀑布模型