算法学习
朱健强ZJQ
这个作者很懒,什么都没留下…
展开
-
请问第5个人多大
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。#include<stdi...原创 2019-03-21 15:52:31 · 112 阅读 · 0 评论 -
斐波那契数列 for循环实现
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........#include<stdio.h>int main(){ int i , f1=1, f2=1; for(i=1;i&l...原创 2019-03-25 08:06:49 · 23221 阅读 · 0 评论 -
27. 移除元素
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...原创 2019-03-30 14:38:08 · 92 阅读 · 0 评论 -
1. 两数之和
给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]<...原创 2019-03-27 16:25:35 · 96 阅读 · 0 评论 -
7. 整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为[−231, 231− 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。...原创 2019-03-27 16:46:45 · 101 阅读 · 0 评论 -
9. 回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文...原创 2019-03-27 16:58:15 · 97 阅读 · 0 评论 -
20. 有效的括号
给定一个只包括'(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false...原创 2019-03-27 17:59:56 · 91 阅读 · 0 评论 -
14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母a-z。<?phpclass So...原创 2019-03-27 18:41:26 · 182 阅读 · 0 评论 -
21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4下面PHP代码是把输入的参数当做数组来测试的。class Solution { /** * @param ListNode $l...原创 2019-03-28 11:11:03 · 96 阅读 · 0 评论 -
26. 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:...原创 2019-03-28 14:25:07 · 170 阅读 · 0 评论 -
LeetCode 1002 查找常用字符
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。你可以按任意顺序返回答案。示例 1:输入:["bella","label","roller"]输出:["e","l","l"]示例 2:输入:["cool","lock...原创 2019-08-15 15:41:42 · 144 阅读 · 0 评论 -
LeetCode 1003 检查替换后的词是否有效
给定有效字符串"abc"。对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X或 Y 可以为空。)那么,X + "abc" + Y 也同样是有效的。例如,如果 S = "abc",则有效字符串的示例是:"abc","aabcbc","abcabc","abcabcababcc"。无效字符串的示例是:"abccba"...原创 2019-08-15 17:22:29 · 112 阅读 · 0 评论 -
LeetCode 1004. 最大连续1的个数 III
给定一个由若干0和1组成的数组A,我们最多可以将K个值从 0 变成 1 。返回仅包含 1 的最长(连续)子数组的长度。示例 1:输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2输出:6解释: [1,1,1,0,0,1,1,1,1,1,1]粗体数字从 0 翻转到 1,最长的子数组长度为 6。示例 2:输入:A = [0,0...原创 2019-08-15 18:08:44 · 219 阅读 · 0 评论 -
选择排序 golang 实现
从待排序的数据中寻找(选择)最小的//选择排序func xuanze(A []int) []int { for i := 0; i < len(A); i++ { //找到最小元素的数组下标 minindex := i for j := i + 1; j < len(A); j++ { if A[j] < A[minindex] { mini...原创 2019-08-17 17:52:55 · 177 阅读 · 0 评论 -
冒泡排序 golang语言实现
冒泡排序,每一轮排序中,挑选出数据大的排到最后,小的数在最前面。 冒泡了嘛^_^。//冒泡排序func maopao(A []int) []int { for i := 0; i < len(A)-1; i++ { for j := 0; j < len(A)-i-1; j++ { if A[j] > A[j+1] { A[j], A[j+1] = ...原创 2019-08-17 17:58:12 · 138 阅读 · 0 评论 -
插入排序golang语言实现
插入排序,在单轮循环中,如果比前一个小就插个队,否则跳出循环。//插入排序func charu(A []int) []int { for i := 0; i < len(A)-1; i++ { for j := i + 1; j > 0; j-- { //如果这个数比前一个小,就交换位置 if A[j] < A[j-1] { A[j], A[j-...原创 2019-08-17 18:05:24 · 164 阅读 · 0 评论 -
输出九九乘法口诀表
使用嵌套 for 循环输出九九乘法口诀表。#include<stdio.h>int main(){ int i, j; for(i=1;i<=9; i++){ for(j=1;j<=i; j++){ printf("%dx%d=%d \t", i, j, i*j); } printf("\n"); } return 0; } 输...原创 2019-03-22 17:48:28 · 1091 阅读 · 0 评论 -
判断字母
用户输入一个字符,判断该字符是否为一个字母。#include<stdio.h>int main(){ char c; printf("输入字符 : \n"); scanf("%c", &c); if ( (c>='a' && c<='z') || (c>='A' && c<='Z')) { pr...原创 2019-03-22 17:39:34 · 268 阅读 · 0 评论 -
判断闰年
#include<stdio.h>//用户输入年份,判断该年份是否为闰年。int main(){ int year; printf("输入年份 : \n"); scanf("%d", &year); //(四年一闰,百年不闰) || 四百年在闰年 if ( (year%4==0 && year%100!=0) || year%400=...原创 2019-03-22 17:32:17 · 238 阅读 · 0 评论 -
猴子吃桃
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。#include<stdio.h>int getPeachNum(day){ if ( 10 == day){ return 1;...原创 2019-03-21 18:22:55 · 76 阅读 · 0 评论 -
小明记单词
小明为了学好英语,需要每天记单词,第一天记1个,第二天记2个依次类推,到第10天的时候小明一共记了多少个单词?请用代码完成,算出小明第10天开始的时候会了多少个单词?#include<stdio.h>int words(day){ if ( 1 == day){ return 1; } else { return day + words(day-1); }...原创 2019-03-21 18:40:47 · 1600 阅读 · 0 评论 -
插入排序
#include<stdio.h>//插入排序 int insert_sort(int arr[], int len){ int i, j, temp; for(i=0; i<len-1; i++){ for(j=i+1;j>0;j--){ if (arr[j]<arr[j-1]){ temp = arr[j]; arr[j...原创 2019-03-25 10:10:53 · 134 阅读 · 0 评论 -
快速排序
#include<stdio.h>//快速排序 int quick_sort(int arr[], int len, int left, int right){ int i, j, t, temp; if (left >= right) return; temp = arr[left]; i = left+1; j = right; while(i...原创 2019-03-25 10:11:38 · 137 阅读 · 0 评论 -
判断数字为几位数
#include<stdio.h>int main(){ int num; printf("请输入一个整数:\n"); scanf("%d",&num); int i=0; while( num!=0 ){ num /= 10; i++; } printf("数字是%d位数",i); return 0; } ...原创 2019-03-25 10:23:52 · 415 阅读 · 0 评论 -
判断回文数
判断一个数是否为回文数。设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数#include<stdio.h>int main(){ int num; printf("请输入一个整数:\n"); scanf("%d",&num); ...原创 2019-03-25 14:23:51 · 500 阅读 · 0 评论 -
冒泡排序
#include<stdio.h>//冒泡排序 int main(){ double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80}; int i, j; puts("排序前\n"); for (i=0; i<=9; i++) { printf("%.2f ",arr[i]);...原创 2019-03-22 09:44:07 · 127 阅读 · 0 评论 -
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。#include<stdio.h>int main(){ int i, j, k; for(i=1; i<5; i++){ for(j=1; j<5; j++){ ...原创 2019-03-25 17:01:58 · 217 阅读 · 0 评论 -
输入某年某月某日,判断这一天是这一年的第几天
题目:输入某年某月某日,判断这一天是这一年的第几天?程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。#include<stdio.h>//某月的天数 int getMonthDay(int month){ int day = 0; switch(month){ case 2: ...原创 2019-03-25 17:58:34 · 1126 阅读 · 0 评论 -
选择排序
#include<stdio.h>//选择排序 int select_sort(int arr[], int len){ int i , j, temp; for(i=0; i<len-1; i++){ for(j=i+1; j<len; j++){ if(arr[i]>arr[j]){ temp = arr[j]; arr[j...原创 2019-03-22 17:04:13 · 84 阅读 · 0 评论 -
归并排序 golang 实现
先把数据分隔成不同的小块,然后小块按照顺序合并。//归并func guibing(A []int) []int { if len(A) < 2 { return A } mid := len(A) / 2 left := guibing(A[0:mid]) right := guibing(A[mid:]) return bing(left, right)}/...原创 2019-08-17 21:12:43 · 543 阅读 · 0 评论