0
点赞
收藏
分享

微信扫一扫

牛客网算法——名企面试的笔试(4)


摘要

请实现有重复数字的升序数组的二分查找

package 牛客网名企面试笔试问题2021;

import org.junit.Test;

import java.util.Arrays;

/**
* @Classname 二分查找
* @Description TODO
* @Date 2021/3/8 9:40
* @Created by xjl
*/
public class 二分查找 {
@Test
public void test() {
int search = search1(new int[]{1, 2, 2, 3, 4}, 2);
System.out.println(search);
}
/**
* @description TODO 没有重复的查找
* @param: nums
* @param: target
* @date: 2021/3/8 9:52
* @return: int
* @author: xjl
*/
public int search(int[] nums, int target) {
int i = Arrays.binarySearch(nums, target);
return i;
}
/**
* @description TODO 有重复的查找
* @param: nums
* @param: target
* @date: 2021/3/8 9:53
* @return: int
* @author: xjl
*/
public int search1(int[] nums, int target) {
int i = Arrays.binarySearch(nums, target);
while (i > 0) {
if (nums[i]!=nums[i-1]){
break;
}
i--;
}
return i;
}
}

二叉树的景象

package 牛客网名企面试笔试问题2021;

/**
* @Classname 二叉树的景象文件
* @Description TODO
* @Date 2021/3/8 9:54
* @Created by xjl
*/
public class 二叉树的景象文件 {
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;

public TreeNode(int val) {
this.val = val;
}
}

public TreeNode Mirror(TreeNode pRoot) {
if (pRoot == null) return pRoot;
if (pRoot.left == null && pRoot.right == null){
return pRoot;
}
//处理根节点,交换左右节点
TreeNode temp=pRoot.left;
pRoot.left=pRoot.right;
pRoot.right=temp;
//处理左子树
Mirror(pRoot.left);
//处理右子树
Mirror(pRoot.right);
return pRoot;
}

}

数字的划分

package 牛客网名企面试笔试问题2021;

import org.junit.Test;

/**
* @Classname 数字的划分
* @Description TODO
* @Date 2021/3/8 10:06
* @Created by xjl
*/
public class 数字的划分 {

public int divideNumber(int n, int k) {
int[][] dp = new int[n + 1][k + 1];
dp[0][0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= k; j++) {
if (i >= j) {
dp[i][j] = dp[i - 1][j - 1] + dp[i - j][j];
}
}
}
return dp[n][k];
}

private int ans = 0;
/**
* @description TODO 同时比较认同的是的采用的是的dfs的方法
* @param: n
* @param: k
* @date: 2021/3/8 10:41
* @return: int
* @author: xjl
*/
public int divideNumber2(int n, int k) {
dfs(1, n, k);
return ans;
}

private void dfs(int i, int n, int k) {
if (n < i) return;
if (k == 1) {
System.out.println(i+" "+" "+n+" "+k);
ans++;
return;
}
while (i <= n) {
dfs(i, n - i, k - 1);
i++;
}
}


@Test
public void test(){
divideNumber2(7,3);
}
}

零钱的兑换

package 牛客网名企面试笔试问题2021;

/**
* @Classname 零钱兑换
* @Description TODO
* @Date 2021/3/8 10:53
* @Created by xjl
*/
public class 零钱兑换 {

int res = Integer.MAX_VALUE;

public int coinChange(int[] coins, int amount) {
if(coins.length == 0){
return -1;
}
findWay(coins,amount,0);
// 如果没有任何一种硬币组合能组成总金额,返回 -1。
if(res == Integer.MAX_VALUE){
return -1;
}
return res;
}

public void findWay(int[] coins,int amount,int count){
if(amount < 0){
return;
}
if(amount == 0){
res = Math.min(res,count);
}

for(int i = 0;i < coins.length;i++){
findWay(coins,amount-coins[i],count+1);
}
}
}

 

举报

相关推荐

0 条评论