经典笔试编程题--Java实现
2017-11-02 14:02
302 查看
题目:
1.输入一个正数n,输出所有和为n 连续正数序列。
例如输入15 = 1+2+3+4+5 = 4+5+6 = 7+8.
2.二分查找:
循环二分查找:
递归二分查找:
3.对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。
给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
1.输入一个正数n,输出所有和为n 连续正数序列。
例如输入15 = 1+2+3+4+5 = 4+5+6 = 7+8.
public static int sum(int num) { int sum = 0; for (int i = 0; i < num; i++) { sum += i; } return sum; } public static List<int[]> getResult(int n) { List<int[]> resultList = new ArrayList<>(); int x = 1; while(x <= n/2 + 1) { int num = 2; int tempSum = num * x + sum(num); while(tempSum <= n) { if(tempSum == n) { int[] arr = new int[num]; for (int i = 0; i < num; i++) { arr[i] = x + i; } resultList.add(arr); break; }else if(tempSum < n) { num++; tempSum = num * x + sum(num); } } x++; } return resultList; }
//等差数列求和: n(a1+an)/2 public static int sum(int min, int max) { return (max -min + 1) * (max + min) / 2; } public static void sumN(int n) { for(int i = 1; i <= (n >> 1); i ++) { for(int j = i + 1; j <= (n >> 1) + 1; j++) { if(n == sum(i, j)) { System.out.println(i + "~" + j); break; } else if(n < sum(i, j)) { break; } 4000 } } }
2.二分查找:
循环二分查找:
public static int binarySearch(int[] arr, int key) { int low = 0; int high = arr.length - 1; while(low <= high) { int mid = (low + high) >> 1; int midVal = arr[mid]; if(key == midVal) { return mid; } else if(key > midVal) { low = mid + 1; } else if(key < midVal){ high = mid - 1; } } return -(low + 1); }
递归二分查找:
public static int binarySearch1(int[] arr, int key, int low, int high) { if(low <= high) { int mid = (low + high) >> 1; int midVal = arr[mid]; if(key == midVal) { return mid; } else if(key > midVal) { low = mid + 1; } else if(key < midVal) { high = mid - 1; } return binarySearch1(arr, key, low, high); } return -1; }
3.对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。
给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
package test; import java.util.HashSet; import java.util.Set; /** * * @ClassName: StringRepeat * @Description: TODO(对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符) * @author chenliming * @date 2017年11月2日 下午1:46:21 * */ public class StringRepeat { //(1)通过循环获取,效率最低 public static int firstRepeat(String str) { char[] array = str.toCharArray(); int firstIndex = -1; for (int i = 0; i < array.length; i++) { if(firstIndex != -1 && i > firstIndex) { break; } for (int j = i + 1; j < array.length; j++) { if(firstIndex != -1 && j > firstIndex) { break; } if(array[j] == array[i]) { if(firstIndex == -1) { firstIndex = j; } else if(j < firstIndex) { firstIndex = j; } } } } return firstIndex; } //(2)方法2:通过hashset集合的特性,当向集合添加数据返回false即获取到对应的值 public static int firstRepeat1(String str) { char[] array = str.toCharArray(); Set<Character> set = new HashSet<>(); for (int i = 0; i < array.length; i++) { boolean flag = set.add(array[i]); if(!flag) { return i; } } return -1; } public static void main(String[] args) { String str = "acfdefgre4344tfagga"; System.out.println(firstRepeat(str)); System.out.println(firstRepeat1(str)); } }
相关文章推荐
- 经典笔试编程题--Java实现
- 大数乘法[JAVA实现]-经典笔试题
- 2016阿里巴巴笔试编程题用java和js 实现形如dssd-sdssd 转换成 DssdSdssd
- 京东2015在线笔试编程题--分苹果Java实现
- 统计文章单词[JAVA实现]-经典笔试题
- 笔试面试算法经典--二叉树的镜像-递归与非递归实现(Java)
- 面试宝典 经典笔试 题 之用 java 实现 旋转数组
- 统计文章单词[JAVA实现]-经典笔试题
- 大数乘法[JAVA实现]-经典笔试题
- 阿里笔试题(2017在线编程题)-- 数串分组 --Java实现
- 2016腾讯笔试编程题java实现求一个数等于两个质数的和的组合数(2016-09-11 19:00)
- 笔试面试算法经典--全排列算法-递归&字典序实现(Java)
- 关于java的一些趣味编程题的实现(1)阿姆斯特朗数
- Java的String经典笔试题付注解
- 【转】JAVA笔试编程题2
- 经典游戏贪食蛇的java实现,
- 【转】JAVA笔试编程题1
- JAVA代码查错笔试题和JAVA编程题
- 非常经典的JAVA编程题全集
- 经典的冒泡排序法 JAVA实现