Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

算法 - 数组下标 #47

Open
Petelin opened this issue Nov 14, 2019 · 0 comments
Open

算法 - 数组下标 #47

Petelin opened this issue Nov 14, 2019 · 0 comments

Comments

@Petelin
Copy link
Owner

Petelin commented Nov 14, 2019

算法 - 数组下标

循环

for i:=0; i < n; i++{
  // dosomething
}

这段程序代表的意思是 dosomething n 次.

第一步确定i的初始值, 然后在看i的结束值, 在算一下循环了多少次(二次验证自己想的对不对)

n到m的集合展开代表多少次就是循环了多少次, 那么有这么几种
[n, m] => m - n + 1

[n, m) 或者 (n, m] => m - n

(n, m) => m - n - 1 

常见的例子 
i:=N; i>0 => (0, N] => N
i:=N; i>=0 => [0, N] => N+1
i:=N; i>=1 => [1, N] => N

i:=0; i<N => [0, N) => N
i:=0; i<=N => [0, N] => N+1
i:=1; i<=N => [1, N] => N

倒数第N个

设数组 nums = []int{...}

倒数第一个: nums[len(nums)-1]

倒数第N个: nums[len(nums)-N] (N >=1)

数组长度

  • 单个数据的长度是 size, 最后一个元素是size - 1
  • 将数组的长度总是记做n,m. 下标总是从0开始到n-1,m-1结束

中间值

先想一个问题, 为什么int的除法本质是什么?

右移操作. 要知道右移动的时候丢掉了最后一位的信息, 对于xxx1和xxx0来说右移的结果都是一样的.

于是我们知道,

  1. 0(00) -> 0(00)

  2. 1(01) -> 0(00)

  3. 2(10) -> 1(01)

  4. 3(11) -> 1(01)

所以每一个偶数和比他大一的奇数, 除以2得到的值都是偶数除以2的值, 看例子

3是奇数, 比他小的偶数是2, 2/2=1; 所以3和2除以2都是1

8的上一位是9, 8和9除以2都是4 ...

编程中,因为我们总是用0当做下标, 这个时候一个

  • 偶数x除以2可以整除, 那么中间值必然在左边或者右边. 因为下标从0开始, 所以是从左边开始

    a b M d e f

  • 如果x是一个奇数, 我们说过一个奇数x和x-1除以2是一样的.所以相当于x-1平分了左右之后, 中间那个数就是奇数.

    a b c M d e f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant