FSharp-04-Loop
comparison
大于
110 > 10
小于
19< 12
等于
12// 数学意义的等于1.0 = 1.0
不等于
12// 不等于0.9999999 <> 1.0
大于等于
10.9999999 >= 1.0
小于等于
10.9999999 <= 1.0
与或非
12345678// Truetrue && true// Falsefalse && true// Truefalse || true// Truefalse |> not
for loop12345678910111213for i in [1..10] do printfn $"{i}" 1 2 3 4 5 6 7 8 9 10
123let list_1 =[0..10]for i in list_1 do printfn $"{i}"
1
1234 ...
数据结构-2-排序算法的简单应用
归并排序应用1—小和问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。1234567[1, 3, 4, 2, 5]1 左边比 1 小的数,没有;3 左边比 3 小的数,1;4 左边比 4 小的数,1、3;2 左边比 2 小的数,1;5 左边比 5 小的数,1、3、4、 2;因此小和为 1 + 1 + 3 + 1 + 1 + 3 + 4 + 2 = 16
算法思想:
将左边小于arr[i]的和转换成求arr[i]右边的和,即原问题是求一个数左边比它小,并求和,转换成一个数右边比它大,并求和
merge过程
A.根据递归树,对于1,3,大于1的只有3,产生小和,递归结束,返回上层 [1 1]
B.对于1,3,4,遍历到1有两个比1大;遍历到3有一个比3大 [1 2; 3 1]
C.对于递归右部分2,5,一个比2大 [2 1]
D.返回上层递归,两端数组归并,对于右半部分,比1大的有两个,比3大的有一个,比4大的有一个 [1 4; 2 1; 3 2; 4 1; 5 0]
注意点
一定要排完序才能直到右边多少数比i大
当左右两侧相同时 ...
FSharp-03-Collections
List
**List元素默认不可变**
定义List
let list = [],空List
let list = [1..10],默认步长的List
let list = [1..2..10],步长为2的List
let list = [1;2;3],给定元素的List
注意list = [1,2,3]则是元组
exapmle
123// 定义Listlet list =[1..10]list
index
value
0
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
1234// printprintfn $"%A{list}"// answer[1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
123// 步长-2let list = [10..-2..0]list
index
value
0
10
1
8
2
6
3
4
4
2
5
0
切片操作1234let list = [0.. ...
算法导学-1-数组类型题目
二分查找LeetCode 704.二分查找
问题
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。1234567输入: nums = [-1,0,3,5,9,12], target = 9输出: 4解释: 9 出现在 nums 中并且下标为 4输入: nums = [-1,0,3,5,9,12], target = 2输出: -1解释: 2 不存在 nums 中因此返回 -1
题解
这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件
写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。
左闭右闭的区间[left, right]target在[left, right]区间,所以有如下两点:
while (left <= right) 要使用 <= ,因为left == right是 ...
数据结构-1-常见排序算法
选择排序
算法思想: 从序列起始顺序扫描,找出最小的关键字,与第一个关键字交换,然后从剩下的关键字中继续选择最小的关键字,并交换。如此反复,最终使得序列有序。
12345678910111213141516171819public void selectionSort(int[] arr) { // 非法情况 if (arr == null || arr.length < 2) { return; } // 核心代码 for (int i = 0; i < arr.length - 1; i++) { // minIndex 记录最小关键字的下标 int minIndex = i; // 内循环表示无序序列部分 for (int j = i + 1; j < arr.length; j++) { minIndex = arr[j] < arr[minIndex] ? j : minInde ...
FSharp-02-Functions
function basics, signature
函数的基本定义
不声明类型的函数
1234567// example 1 let f x = x + 1// example 2let cyliderVolume radius length = let pi = 3.1415 length * pi * radius * radius
显式声明类型的函数
1234567// example 1 let f (x:int) = x + 1// example 2let cyliderVolume (radius:float) (length:float) " float = let pi = 3.1415 length * pi * radius * radius
单参数函数
1234567let f x = x * x// invokef 10.0// result100
多参数函数
123456789101112131415161718let g a b = a + b// invokeg 1 2// result3let h (a, b, ...










