• ## 算法编程题

千次阅读 2017-06-26 20:17:47
有这样一道智力：“某商店规定：三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶，她最多可以换多少瓶汽水喝？”答案是5瓶，方法如下：先用9个空瓶子换3瓶汽水，喝掉3瓶满的，喝完以后4个空瓶子，用3个再换一...
1.假设一个数组长度为n，数组中的值的范围为0～n-1 ，求数组中任意一个重复的数字。

public class Suanfa {
public static void main(String[] args) {
int nums[] = {2,4,6,1,2,3,0};
int result = Search(nums);
System.out.println(" " + result);
}

private static int Search(int []array) {
int length = array.length;

if(array == null || length <= 0) {
return -1;
}

for(int i = 0; i < length; i++) {
while(array[i] != i) {
if(array[i] != array[array[i]]) {
int temp = array[array[i]];
array[array[i]] = array[i];
array[i] = temp;
} else {
return array[i];
}
}
}
return -1;
}
}2.数组长度为n+1，数组中的值的范围为1～n,求数组中的任意一个重复的值。

public class Suanfa {
public static void main(String[] args) {
int nums[] = {2,4,6,1,2,3,0,5};
int result = Search(nums);
System.out.println(" " + result);
}

private static int Search(int []array) {
int length = array.length;

if(array == null || length <= 0) {
return -1;
}

int min = 1;
int max = length -1;
int result = -1;

while(min <= max) {
int mid = (max + min)/2;
int count = countNums(array, min, mid);
if(min == max) {
result = min;
break;
}
if(count > mid - min + 1) {
max = mid;
} else {
min = mid + 1;
}
}

return result;
}

private static int countNums(int []array, int min, int max) {
if(array == null || array.length <= 0) {
return -1;
}

int count = 0;
for (int i =0; i < array.length; i++) {
if(array[i] <= max && array[i] >= min) {
count++;
}
}
return count;
}
}3.一个二维整型数组，每行元素值递增，每列元素值也递增，判断给定的值是否在这个数组中。

public class Suanfa {
public static void main(String[] args) {

int array[][] = {{1,2,3,4,5}, {2,3,4,5,6}, {3,4,5,6,7}, {4,5,6,7,8}, {5,6,7,8,9}};
System.out.println("" + Search(array, 5));
}

private static boolean Search(int [][]array, int target) {
if(array == null || array.length == 0){
return false;
}

int rows = array.length;
int cols = array[0].length;
int row = 0;
int col = cols - 1;

while(row < rows && col >= 0) {
if (array[row][col] < target) {
row++;
} else if (array[row][col] > target) {
col--;
} else {
System.out.println("" + row + " " + col);
return true;
}
}

return false;
}
}

4、阿里抢红包问题

public static int myAns(int[] _timeList) {
int nums[] = new int[_timeList.length];

for(int i =0; i <= _timeList.length; i++) {
int count = 0;
for(int j = 0; j < i; j++) {
if (_timeList[j] == 0) {
count++;
}
}
for(int j = i; j < _timeList.length; j++) {
if (_timeList[j] == 1) {
count++;
}
}
nums[i] = count;
}

int max = nums[0];
for (int i =1 ; i < nums.length; i++) {
if (nums[i] > nums[i - 1]) max = nums[i];
}

return max;
}

5、华为笔试题：

有这样一道智力题：“某商店规定：三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶，她最多可以换多少瓶汽水喝？”答案是5瓶，方法如下：先用9个空瓶子换3瓶汽水，喝掉3瓶满的，喝完以后4个空瓶子，用3个再换一瓶，喝掉这瓶满的，这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水，喝掉这瓶满的，喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶，最多可以换多少瓶汽水喝？

输入描述:
输入文件最多包含10组测试数据，每个数据占一行，仅包含一个正整数n（1<=n<=100），表示小张手上的空汽水瓶数。n=0表示输入结束，你的程序不应当处理这一行。

输出描述:
对于每组测试数据，输出一行，表示最多可以喝的汽水瓶数。如果一瓶也喝不到，输出0。

输入例子1:
3
10
81
0

输出例子1:
1
5
40
    //方法1：递归
public static int calcute_1(int n) {
int count = 0;
if(n <= 1) {
count += 0;
} else if (n == 2){
count += 1;
} else {
count += n/3;
n = n / 3 + n % 3;
count += calcute(n);
}
return count;
}	//方法2：循环
public static int calcute_2(int n) {
int count = 0;
if(n <= 1) {
count += 0;
} else if (n == 2){
count += 1;
}

while (n > 2) {
count += n/3;
n = n / 3 + n % 3;
if(n <= 1) {
count += 0;
} else if (n == 2){
count += 1;
}
}
return count;
}

明明想在学校中请一些同学一起做一项问卷调查，为了实验的客观性，他先用计算机生成了N个1到1000之间的随机整数（N≤1000），对于其中重复的数字，只保留一个，把其余相同的数去掉，不同的数对应着不同的学生的学号。然后再把这些数从小到大排序，按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

Input Param

n               输入随机数的个数

inputArray      n个随机整数组成的数组

Return Value

OutputArray    输出处理后的随机整数

注：测试用例保证输入参数的正确性，答题者无需验证。测试用例不止一组。

输入描述:
输入多行，先输入随机整数的个数，再输入相应个数的整数

输出描述:
返回多行，处理后的结果

输入例子1:
11
10
20
40
32
67
40
20
89
300
400
15

输出例子1:
10
15
20
32
40
67
89
300
400
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
import java.util.Set;

public class Solution{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
HashMap hashMap = new HashMap();
int num = 0;
while(sc.hasNext()) {
int n = sc.nextInt();
if(n == num) break;
hashMap.put(n, null);
num++;
}

int[] array = new int[100];
int j = 0;
Set set = hashMap.keySet();
Iterator iterator = set.iterator();

while (iterator.hasNext()) {
array[j++] = (int) iterator.next();
}
quickSort(array, 0, j - 1);
for(int i = 0; i <= j - 1; i++) {
System.out.println(array[i]);
}
}

public static void quickSort(int[] array, int low, int high) {
int i = low;
int j = high;
if (low >= high) {
return;
}
int key = array[low];

while (low < high) {
while (key <= array[high] && low < high) {
high--;
}
array[low] = array[high];
while (key >= array[low] && low < high) {
low++;
}
array[high] = array[low];
}
array[low] = key;

quickSort(array, i, low - 1);
quickSort(array, low + 1, j);
}

}
展开全文
• Java算法编程题，一共50道，答案完整，可以检测Java的掌握情况
• C算法编程题（一）扑克牌发牌 C算法编程题（二）正螺旋 C算法编程题（三）画表格 C算法编程题（四）上三角 C算法编程题（五）“E”的变换 C算法编程题（六）串的处理 C算法编程题（七...

我的编程开始（C）

C算法编程题（一）扑克牌发牌

C算法编程题（二）正螺旋

C算法编程题（三）画表格

C算法编程题（四）上三角

C算法编程题（五）“E”的变换

C算法编程题（六）串的处理

C算法编程题（七）购物


展开全文
• 算法编程题精典总结实现计算器 实现计算器 计算器实现总结
算法编程题精典总结实现计算器双指针和滑动窗口链表类题目回溯算法股票买卖
实现计算器
计算器实现总结
双指针和滑动窗口
双指针 包括 左右指针 和 快慢指针。左右指针一般解决数组和字符串问题，滑动窗口属于左右指针。快慢指针用于解决链表。

普通双指针参考
滑动窗口参考

链表类题目
参考文章

包括 链表反转，整个反转，前n个节点反转，中间 n 个节点反转，k个一组反转。（有递归和迭代）
判断 回文链表

回溯算法
参考文章
股票买卖
参考文章


展开全文
• 2017JAVA算法编程题全集(中级)
• 14种模式解决面试算法编程题（PART I） 14种模式解决面试算法编程题（PART II）


14种模式解决面试算法编程题（PART I）

14种模式解决面试算法编程题（PART II）

展开全文
• 　上一篇《C算法编程题（六）串的处理》 　有些朋友看过我写的这个算法编程题系列，都说你写的不是什么算法，也不是什么C++，大家也给我提出用一些C++特性去实现问题更方便些，在这里谢谢大家提的一些建议和意见，我...
• 写在前面 万万没想到，暑假还没开始，有些公司的秋招提前批已经来了…很慌…数据结构和算法题可以说是秋招笔试面试必考的内容，如果你还不够熟练（just...好了，今天文章的主题就是分享14种解决面试算法编程题的思路...
• 算法编程题 排序 参考我的博客 常考的有：冒泡排序、快速排序、归并排序、堆排序 写一个lower_bound()函数 参考我的博客 手写全排列，并分析算法的复杂度。 没有重复数字的：leetcode 46题，参考我的博客 有重复...
• ## Android之算法编程题

千次阅读 2016-10-11 12:14:41
Android面试之编程题
• 为了简单说明算法编程题的程序框架，以非常简单的例题说明算法编程题的程序编写思路。 算法编程题答题要求： 测试数据输入文件名xxx.in； 测试数据输出文件名xxx.out； 测试程序文件名：xxx.c（C）、xxx.cpp...

...