首页 > 网易笔试8.8 Java 自己好菜啊 a一个
头像
内推绿盟:NTAGkW3
编辑于 2020-08-10 17:08
+ 关注

网易笔试8.8 Java 自己好菜啊 a一个

1.注意long的问题
/*把数组的每个数拆成素数,拆后最多有多少个数*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MaxPrimeNum {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		long len = Long.parseLong((br.readLine().trim().split(" "))[0]);
		String[] strs = br.readLine().trim().split(" ");
		long count = 0;
		for (int i = 0; i < len; i++) {
			long tmp = Long.parseLong(strs[i]);
			count += tmp /2;
		}
		System.out.println(count);
		
	}
2.借鉴了一个牛友的思想,类似于merge
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;



/*
 * 给一个长度为m的序列T,求一个长度为n的序列S,要求T是S的子序列(T是由S删除数字得到的)求S按字典序排序的最小序列。
 * */
public class MinDictionarySequence {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] strs = br.readLine().trim().split(" ");

		int n = Integer.parseInt(strs[0]);
		int m = Integer.parseInt(strs[1]);
		
		int[] nums = new int[m]; //[2,1,5]
		int[] res = new int[n];
		HashSet<Integer> set = new HashSet<>();
		
		strs = br.readLine().trim().split(" ");
		for (int i = 0; i < nums.length; i++) {
			nums[i] = Integer.parseInt(strs[i]);
			set.add(nums[i]);
		}
		
		int max = Math.max(n, maxOfNums(nums));
		int[] temp = new int[max-m];
		int a = 0;
		for(int i = 1; i <= max; i++) {
			if(set.contains(i)) continue;
			else temp[a++] = i;
		} //temp = [3,4] 有个疑问,不算0的? 0 2 1 3 5字典序比2 1 3 4 5小吧?
		
		
		Arrays.sort(temp);
		//Merge
		int nums_i = 0, temp_i = 0, res_i = 0;
		while(nums_i < m && temp_i < temp.length ) {
			if(nums[nums_i] < temp[temp_i]) res[res_i++] = nums[nums_i++];
			else res[res_i++] = temp[temp_i++];
		}
		while(nums_i < m) res[res_i++] = nums[nums_i++];
		while(temp_i < temp.length ) res[res_i++] = nums[temp_i++];
		
		for (int i = 0; i < res.length; i++) {
			if(i != res.length - 1) System.out.print(res[i] + " ");
			else System.out.print(res[i]);
		}
		
	}
	public static int maxOfNums(int[] nums) {
		int max = Integer.MIN_VALUE;
		for (int i = 0; i < nums.length; i++) {
			max = Math.max(nums[i], max);
		}
		return max;
	}
}
3.人家直接递归进去了,我还在想怎么利用leetcode 416的函数,然后怎么去掉一些值...
package com.netease.yanxuan;
/*两个人分钱,给一组数组,[5,15,30,30,60],求两个人的钱数相同时多余的部分最少是多少
 * 子集和
 * */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MinDrop {
	static int res = Integer.MAX_VALUE;
	static int sum = 0;
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt((br.readLine().trim().split(" "))[0]);
		for (int i = 0; i < t; i++) {
			int n = Integer.parseInt((br.readLine().trim().split(" "))[0]);
			String[] strs = br.readLine().trim().split(" ");
			int[] arr = new int[n];
			res = Integer.MAX_VALUE;
			sum = 0;
			for (int j = 0; j < arr.length; j++) {
				arr[j] = Integer.parseInt(strs[j]);
				sum += arr[j];
			}
			System.out.println(sum);
//			Arrays.sort(arr);
			minDropValue(arr, 0, 0, 0 );
			System.out.println(res);
		}
	}
	//递归
	public static void minDropValue(int[] arr, int index, int ans1, int ans2) {
		if(index == arr.length) {
			if(ans1 == ans2) res = Math.min(res, sum - 2*ans1);
			return;
		}
		int val = arr[index];
		minDropValue(arr, index+1, ans1, ans2);//谁都不给
		minDropValue(arr, index+1, ans1+val, ans2);//给第一个人
		minDropValue(arr, index+1, ans1, ans2+val);//给第二个人
		
	}
	
}
4.蹲一个大佬来补一个答案。。。 万分感谢

给出一个无向图,一共有n个点,m条边,每条边的权值为v。
求一个生成树,使得图保持联通的同时,权值的最大值和最小值之差最小。

输入
第一行为n和m,表示点的个数和边的条数
后面为m行,表示m条边的两个顶点和其权值
3 5
1 2 10
1 3 5
3 1 12
2 3 19
1 2 74
输出
2 选择边1和3,最小差值为12-10



全部评论

(3) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐