博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扬帆起航,再踏征程(三)
阅读量:6922 次
发布时间:2019-06-27

本文共 5571 字,大约阅读时间需要 18 分钟。

 

(尊重劳动成果,转载请注明出处: 冷血之心的博客)

 

 

题目1

找到第一次出差错的版本

      每个项目开发时,我们用代码版本控制工具,每次提交都会更新代码版本。版本号从1到n递增。有人提交代码后,导致后续的代码在单元测试中,都是错的。

请找到第一个错误的版本号。

 

代码如下:

package com.ywq.test1;import org.junit.Test;public class Solution1 implements VersionControl {    @Test	public void test(){    	int result = findFirstBadVersion(9);	    System.out.println("第一个错误版本为:"+result);	}		public  int findFirstBadVersion(int n) {		int left = 1;		int right = n;		//建立循环,目标是找出好、坏的分界点。		while (left + 1 < right) {			int mid=(left+right)/2;			boolean flag = isBad(mid);			if (flag) {				right = mid;			} else {				left = mid;			}		}       //		当退出循环时,left和right相差1		if(isBad(left)){			return left;		}else {			return right;		}	}	@Override	public boolean isBad(int k) {				if (k >= 3) {				return true;			} else {				return false;			}			}}interface VersionControl {	public boolean isBad(int k); }

 

 

题目2:
合并两个有序的链表。其中链表的节点的数据结构如下:
public class ListNode {     public int val;     public ListNode next;
     public ListNode(int val) {         this.val = val;         this.next = null;     }}

 

代码如下:

package com.ywq.test2;import org.junit.Test;public class Solution2 {	@Test	public void test() {		//创建有序链表list1  0-2-5-7-9		ListNode list1 = new ListNode(0);  		list1.next = new ListNode(2);  		list1.next.next = new ListNode(5);  		list1.next.next.next = new ListNode(7); 		list1.next.next.next.next = new ListNode(9);	 		//创建有序链表list2  1-3-6-8        ListNode list2 = new ListNode(1);          list2.next = new ListNode(3);          list2.next.next = new ListNode(6);          list2.next.next.next = new ListNode(8);           //调用合并方法        ListNode list3 = mergeKLists(list1, list2);         //将结果输出        while (list3 != null) {              System.out.println(list3.val);              list3 = list3.next;          }  	}	public ListNode mergeKLists(ListNode list1, ListNode list2) {				ListNode result=null;				if (list1 == null && list2 == null) {              return null;          }          if (list1 == null) {              result = list2;              return result;          }          if (list2 == null) {              result = list1;              return result;          }          if (list1.val > list2.val) {              result = list2;              list2 = list2.next;          } else {              result = list1;              list1 = list1.next;          }          result.next = mergeKLists(list1, list2);                  return result;  			     		}	}class ListNode {    public int val;    public ListNode next;    public ListNode(int val) {        this.val = val;        this.next = null;    }}

 

 
题目3:
两数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数target。
你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。

 

代码如下:

package com.ywq.test3;import java.util.HashMap;import org.junit.Test;public class Solution3 {	@Test	public void test() {		int[] a = { 2, 4, 8, 12, 5 };		int target = 17;		int[] sum = twoSum(a, target);		for (int i : sum) {			System.out.println(i);		}	}	public int[] twoSum(int[] a, int target) {		//创建结果数组		int[] result = new int[2];				HashMap
map = new HashMap<>(); //建立循环,遍历target-a[i]是否在map中 for (int i = 0; i < a.length; i++) { if (map.containsKey(target - a[i])) { //确定输出角标的先后顺序 if (i > map.get(target - a[i])) { result[0] = map.get(target - a[i]); result[1] = i; } else { result[0] = i; result[1] = map.get(target - a[i]); } } else { map.put(a[i], i); } } return result; }}

 

 

题目4:
生产者消费者
写代码实现:
3个生产者生产消息,放到一个队列里。5个消费者消费消息。
生产者生产的消息格式:
生产者 ID + 时间戳 + 随机文本
消费者消费消息后,打印出消费者 ID 和消费的内容。
举例:
producer message:
1002_${timestamp}_helloworld42129
 
consumer:

consumer ID = 2003, consume message:1002_${timestamp}_helloworld42129

 

代码如下:

package com.ywq.test5;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;public class Solution4 {		public static void main(String[] args) {		BlockingQueue q = new LinkedBlockingQueue();		Producer p1 = new Producer(q);		Producer p2 = new Producer(q);		Producer p3 = new Producer(q);				Consumer c1 = new Consumer(q);		Consumer c2 = new Consumer(q);		Consumer c3 = new Consumer(q);		Consumer c4 = new Consumer(q);		Consumer c5 = new Consumer(q);				p1.setName("生产者1");		p2.setName("生产者2");		p3.setName("生产者3");				c1.setName("消费者1");		c2.setName("消费者2");		c3.setName("消费者3");		c4.setName("消费者4");		c5.setName("消费者5");				p1.start();		p2.start();		p3.start();		c1.start();		c2.start();		c3.start();		c4.start();		c5.start();	}}class Producer extends Thread {	private final BlockingQueue queue;   	Producer(BlockingQueue q) {		queue = q;	}	// 获取当前时间	public String getTime() {		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 设置日期格式		String time = df.format(new Date());// new Date()为获取当前系统时间		return time;	}	public void run() {		while (true) {			try {							System.out.println("生产者生产的消息为:"+Thread.currentThread().getName() +" "+ getTime()+" "+Math.random());				queue.put(Thread.currentThread().getName() +" "+ getTime()+" "+Math.random());				Thread.sleep(1000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}}class Consumer extends Thread {	private final BlockingQueue queue;	Consumer(BlockingQueue q) {		queue = q;	}	public void run() {		while (true) {			try {				System.out.println("consumer ID="+Thread.currentThread().getName() +", "+"consumer message:"+ queue.take());				Thread.sleep(20000);			} catch (InterruptedException e) {				e.printStackTrace();			}		}	}}

 

 

 

 

如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以加群366533258交流讨论哈~

 

 

 

 

转载于:https://www.cnblogs.com/lanzhi/p/6467227.html

你可能感兴趣的文章
网络爬虫01: Urllib2库使用代理IP
查看>>
又好又快,免费学习编程的9个地方
查看>>
PreparedStatement 用问号传参引发查询(SQLServer )数据慢的解决方案
查看>>
CAS 单点登录碰到问题汇总
查看>>
Java异常处理最佳实践及陷阱防范
查看>>
mysql报错 could not fetch initial value for incre...
查看>>
zabbix 微信api告警调用
查看>>
VS2008模板遗失问题(转载孙焱的博客)
查看>>
Laravel5.2之Filesystem源码解析(上)
查看>>
PHP PSR-1 基本代码规范(中文版)
查看>>
PHP判断缓存文件是否修改的方法
查看>>
brew安装amp需要注意的点
查看>>
sizeof与strlen的区别
查看>>
快嘉开发框架脚手架及使用说明v1
查看>>
laravel 自带Auth多用户认证
查看>>
linux free
查看>>
Spring RedisTemplate操作-通道操作(10)
查看>>
Redis笔记系列(二)——Redis安装部署与维护详解
查看>>
Hibernate 持久化上下文总结
查看>>
XPath 与多线程爬虫
查看>>